blob: f30ae2ad20d7f8e1ebd5f74e4c282f5a657b18f3 [file] [log] [blame]
// Copyright 2015 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/media_router/common/media_sink.h"
#include "base/i18n/string_compare.h"
#include "base/strings/utf_string_conversions.h"
#include "third_party/icu/source/i18n/unicode/coll.h"
namespace media_router {
MediaSink::MediaSink(const MediaSink::Id& sink_id,
const std::string& name,
SinkIconType icon_type,
mojom::MediaRouteProviderId provider_id)
: sink_id_(sink_id),
name_(name),
icon_type_(icon_type),
provider_id_(provider_id) {}
MediaSink::MediaSink(const MediaSink& other) = default;
MediaSink::MediaSink(MediaSink&& other) noexcept = default;
MediaSink::MediaSink() = default;
MediaSink::~MediaSink() = default;
MediaSink& MediaSink::operator=(const MediaSink& other) = default;
MediaSink& MediaSink::operator=(MediaSink&& other) noexcept = default;
bool MediaSink::CompareUsingCollator(const MediaSink& other,
const icu::Collator* collator) const {
if (icon_type_ != other.icon_type_) {
return icon_type_ < other.icon_type_;
}
if (collator) {
std::u16string this_name = base::UTF8ToUTF16(name_);
std::u16string other_name = base::UTF8ToUTF16(other.name_);
UCollationResult result = base::i18n::CompareString16WithCollator(
*collator, this_name, other_name);
if (result != UCOL_EQUAL) {
return result == UCOL_LESS;
}
} else {
// Fall back to simple string comparison if collator is not
// available.
int val = name_.compare(other.name_);
if (val) {
return val < 0;
}
}
return sink_id_ < other.sink_id_;
}
} // namespace media_router