123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- // Copyright 2020 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/query_tiles/tile.h"
- #include <algorithm>
- #include <deque>
- #include <map>
- #include <sstream>
- #include <utility>
- namespace query_tiles {
- namespace {
- void DeepCopyTiles(const Tile& input, Tile* out) {
- DCHECK(out);
- out->id = input.id;
- out->display_text = input.display_text;
- out->query_text = input.query_text;
- out->accessibility_text = input.accessibility_text;
- out->image_metadatas = input.image_metadatas;
- out->search_params = input.search_params;
- out->sub_tiles.clear();
- for (const auto& child : input.sub_tiles) {
- auto entry = std::make_unique<Tile>();
- DeepCopyTiles(*child.get(), entry.get());
- out->sub_tiles.emplace_back(std::move(entry));
- }
- }
- void SerializeEntry(const Tile* entry, std::stringstream& out) {
- if (!entry)
- return;
- out << "entry id: " << entry->id << " query text: " << entry->query_text
- << " display text: " << entry->display_text
- << " accessibility_text: " << entry->accessibility_text << " \n";
- for (const auto& image : entry->image_metadatas)
- out << "image url: " << image.url.possibly_invalid_spec() << " \n";
- }
- std::string DebugStringInternal(const Tile* root) {
- if (!root)
- return std::string();
- std::stringstream out;
- out << "Entries detail: \n";
- std::map<std::string, std::vector<std::string>> cache;
- std::deque<const Tile*> queue;
- queue.emplace_back(root);
- while (!queue.empty()) {
- size_t size = queue.size();
- for (size_t i = 0; i < size; i++) {
- auto* parent = queue.front();
- SerializeEntry(parent, out);
- queue.pop_front();
- for (size_t j = 0; j < parent->sub_tiles.size(); j++) {
- cache[parent->id].emplace_back(parent->sub_tiles[j]->id);
- queue.emplace_back(parent->sub_tiles[j].get());
- }
- }
- }
- out << "Tree table: \n";
- for (auto& pair : cache) {
- std::string line;
- line += pair.first + " : [";
- std::sort(pair.second.begin(), pair.second.end());
- for (const auto& child : pair.second)
- line += " " + child;
- line += " ]\n";
- out << line;
- }
- return out.str();
- }
- } // namespace
- ImageMetadata::ImageMetadata() = default;
- ImageMetadata::ImageMetadata(const GURL& url) : url(url) {}
- ImageMetadata::~ImageMetadata() = default;
- ImageMetadata::ImageMetadata(const ImageMetadata& other) = default;
- bool ImageMetadata::operator==(const ImageMetadata& other) const {
- return url == other.url;
- }
- TileStats::TileStats() = default;
- TileStats::TileStats(base::Time last_clicked_time, double score)
- : last_clicked_time(last_clicked_time), score(score) {}
- TileStats::~TileStats() = default;
- TileStats::TileStats(const TileStats& other) = default;
- bool TileStats::operator==(const TileStats& other) const {
- return last_clicked_time == other.last_clicked_time && score == other.score;
- }
- bool Tile::operator==(const Tile& other) const {
- return id == other.id && display_text == other.display_text &&
- query_text == other.query_text &&
- accessibility_text == other.accessibility_text &&
- image_metadatas.size() == other.image_metadatas.size() &&
- sub_tiles.size() == other.sub_tiles.size() &&
- search_params == other.search_params;
- }
- bool Tile::operator!=(const Tile& other) const {
- return !(*this == other);
- }
- Tile::Tile(const Tile& other) {
- DeepCopyTiles(other, this);
- }
- Tile::Tile() = default;
- Tile::Tile(Tile&& other) noexcept = default;
- Tile::~Tile() = default;
- Tile& Tile::operator=(const Tile& other) {
- DeepCopyTiles(other, this);
- return *this;
- }
- Tile& Tile::operator=(Tile&& other) noexcept = default;
- std::string Tile::DebugString() {
- return DebugStringInternal(this);
- }
- } // namespace query_tiles
|