// Copyright 2016 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "components/ntp_snippets/category.h" #include "base/check_op.h" namespace ntp_snippets { // static Category Category::FromKnownCategory(KnownCategories known_category) { return FromIDValue(static_cast(known_category)); } // static Category Category::FromRemoteCategory(int remote_category) { DCHECK_GT(remote_category, 0); return Category(static_cast(KnownCategories::REMOTE_CATEGORIES_OFFSET) + remote_category); } // static Category Category::FromIDValue(int id) { DCHECK(IsValidIDValue(id)) << id << " is not a valid category ID. This may have " "been caused by removal of a local " "KnownCategory."; return Category(id); } // static bool Category::IsValidIDValue(int id) { return (id >= 0) && ((id < static_cast(KnownCategories::LOCAL_CATEGORIES_COUNT) || id > static_cast(KnownCategories::REMOTE_CATEGORIES_OFFSET))); } Category::Category(int id) : id_(id) {} int Category::remote_id() const { DCHECK_GT(id_, static_cast(KnownCategories::REMOTE_CATEGORIES_OFFSET)); return id_ - static_cast(KnownCategories::REMOTE_CATEGORIES_OFFSET); } bool Category::IsKnownCategory(KnownCategories known_category) const { DCHECK_NE(known_category, KnownCategories::LOCAL_CATEGORIES_COUNT); DCHECK_NE(known_category, KnownCategories::REMOTE_CATEGORIES_OFFSET); return id_ == static_cast(known_category); } bool operator==(const Category& left, const Category& right) { return left.id() == right.id(); } bool operator!=(const Category& left, const Category& right) { return !(left == right); } bool Category::CompareByID::operator()(const Category& left, const Category& right) const { return left.id() < right.id(); } std::ostream& operator<<(std::ostream& os, const Category& obj) { os << obj.id(); return os; } } // namespace ntp_snippets