assistant_query_history.cc 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. // Copyright 2018 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/assistant/model/assistant_query_history.h"
  5. namespace ash {
  6. AssistantQueryHistory::AssistantQueryHistory(int capacity)
  7. : capacity_(capacity) {
  8. queries_.reserve(capacity);
  9. }
  10. AssistantQueryHistory::~AssistantQueryHistory() = default;
  11. std::unique_ptr<AssistantQueryHistory::Iterator>
  12. AssistantQueryHistory::GetIterator() const {
  13. return std::make_unique<AssistantQueryHistory::Iterator>(queries_);
  14. }
  15. void AssistantQueryHistory::Add(const std::string& query) {
  16. if (query.empty())
  17. return;
  18. if (static_cast<int>(queries_.size()) == capacity_)
  19. queries_.pop_front();
  20. queries_.push_back(query);
  21. }
  22. AssistantQueryHistory::Iterator::Iterator(
  23. const base::circular_deque<std::string>& queries)
  24. : queries_(queries), cur_pos_(queries_.size()) {}
  25. AssistantQueryHistory::Iterator::~Iterator() = default;
  26. absl::optional<std::string> AssistantQueryHistory::Iterator::Next() {
  27. // queries_.size() is of type unsigned int and queries_.size() -1 will
  28. // overflow if it is 0.
  29. if (cur_pos_ + 1 >= queries_.size()) {
  30. cur_pos_ = queries_.size();
  31. return absl::nullopt;
  32. }
  33. cur_pos_++;
  34. return absl::make_optional<std::string>(queries_[cur_pos_]);
  35. }
  36. absl::optional<std::string> AssistantQueryHistory::Iterator::Prev() {
  37. if (queries_.size() == 0)
  38. return absl::nullopt;
  39. if (cur_pos_ != 0)
  40. cur_pos_--;
  41. return absl::make_optional<std::string>(queries_[cur_pos_]);
  42. }
  43. void AssistantQueryHistory::Iterator::ResetToLast() {
  44. cur_pos_ = queries_.size();
  45. }
  46. } // namespace ash