common/lru/lru_cache.h (27 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include <list> #include <unordered_map> namespace resdb { template <typename KeyType, typename ValueType> class LRUCache { public: LRUCache(int capacity); ~LRUCache(); ValueType Get(KeyType key); void Put(KeyType key, ValueType value); int GetCapacity(); void SetCapacity(int new_capacity); void Flush(); int GetCacheHits() const; int GetCacheMisses() const; double GetCacheHitRatio() const; private: int capacity_; int cache_hits_; int cache_misses_; std::list<KeyType> key_list_; // Doubly linked list to store keys std::unordered_map<KeyType, ValueType> lookup_; // Hash map for key-value pairs std::unordered_map<KeyType, typename std::list<KeyType>::iterator> rlookup_; // Hash map for key-iterator pairs }; } // namespace resdb