Index: components/copresence/timed_map.h |
diff --git a/components/copresence/timed_map.h b/components/copresence/timed_map.h |
deleted file mode 100644 |
index ef3b9961fd86d43a5c22de50e14bc93e8b076bbf..0000000000000000000000000000000000000000 |
--- a/components/copresence/timed_map.h |
+++ /dev/null |
@@ -1,114 +0,0 @@ |
-// Copyright 2014 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. |
- |
-#ifndef COMPONENTS_COPRESENCE_TIMED_MAP_H_ |
-#define COMPONENTS_COPRESENCE_TIMED_MAP_H_ |
- |
-#include <stddef.h> |
- |
-#include <map> |
-#include <memory> |
-#include <queue> |
-#include <utility> |
-#include <vector> |
- |
-#include "base/macros.h" |
-#include "base/time/default_tick_clock.h" |
-#include "base/time/tick_clock.h" |
-#include "base/time/time.h" |
-#include "base/timer/timer.h" |
- |
-namespace copresence { |
- |
-// TimedMap is a map with the added functionality of clearing any |
-// key/value pair after its specified lifetime is over. |
-// TODO(ckehoe): Why is this interface so different from std::map? |
-template <typename KeyType, typename ValueType> |
-class TimedMap { |
- public: |
- TimedMap(const base::TimeDelta& lifetime, size_t max_elements) |
- : kEmptyValue(ValueType()), |
- clock_(new base::DefaultTickClock()), |
- lifetime_(lifetime), |
- max_elements_(max_elements) { |
- timer_.Start(FROM_HERE, lifetime_, this, &TimedMap::ClearExpiredTokens); |
- } |
- |
- ~TimedMap() {} |
- |
- void Add(const KeyType& key, const ValueType& value) { |
- map_[key] = value; |
- expiry_queue_.push(KeyTimeTuple(key, clock_->NowTicks() + lifetime_)); |
- while (map_.size() > max_elements_) |
- ClearOldestToken(); |
- } |
- |
- bool HasKey(const KeyType& key) { |
- ClearExpiredTokens(); |
- return map_.find(key) != map_.end(); |
- } |
- |
- const ValueType& GetValue(const KeyType& key) { |
- ClearExpiredTokens(); |
- auto elt = map_.find(key); |
- return elt == map_.end() ? kEmptyValue : elt->second; |
- } |
- |
- ValueType* GetMutableValue(const KeyType& key) { |
- ClearExpiredTokens(); |
- auto elt = map_.find(key); |
- return elt == map_.end() ? nullptr : &(elt->second); |
- } |
- |
- // TODO(ckehoe): Add a unit test for this. |
- size_t Erase(const KeyType& key) { |
- return map_.erase(key); |
- } |
- |
- void set_clock_for_testing(std::unique_ptr<base::TickClock> clock) { |
- clock_ = std::move(clock); |
- } |
- |
- private: |
- void ClearExpiredTokens() { |
- while (!expiry_queue_.empty() && |
- expiry_queue_.top().second <= clock_->NowTicks()) |
- ClearOldestToken(); |
- } |
- |
- void ClearOldestToken() { |
- map_.erase(expiry_queue_.top().first); |
- expiry_queue_.pop(); |
- } |
- |
- using KeyTimeTuple = std::pair<KeyType, base::TimeTicks>; |
- |
- class EarliestFirstComparator { |
- public: |
- // This will sort our queue with the 'earliest' time being the top. |
- bool operator()(const KeyTimeTuple& left, const KeyTimeTuple& right) const { |
- return left.second > right.second; |
- } |
- }; |
- |
- using ExpiryQueue = std::priority_queue< |
- KeyTimeTuple, std::vector<KeyTimeTuple>, EarliestFirstComparator>; |
- |
- const ValueType kEmptyValue; |
- |
- std::unique_ptr<base::TickClock> clock_; |
- base::RepeatingTimer timer_; |
- const base::TimeDelta lifetime_; |
- const size_t max_elements_; |
- std::map<KeyType, ValueType> map_; |
- // Priority queue with our element keys ordered by the earliest expiring keys |
- // first. |
- ExpiryQueue expiry_queue_; |
- |
- DISALLOW_COPY_AND_ASSIGN(TimedMap); |
-}; |
- |
-} // namespace copresence |
- |
-#endif // COMPONENTS_COPRESENCE_TIMED_MAP_H_ |