diff --git a/src/cpp/ripple/TaggedCache.h b/src/cpp/ripple/TaggedCache.h index 9b75ee8389..1d1607052e 100644 --- a/src/cpp/ripple/TaggedCache.h +++ b/src/cpp/ripple/TaggedCache.h @@ -26,24 +26,29 @@ extern LogPartition TaggedCachePartition; template class TaggedCache { public: - typedef c_Key key_type; - typedef c_Data data_type; - - typedef boost::weak_ptr weak_data_ptr; - typedef boost::shared_ptr data_ptr; - typedef std::pair cache_entry; - typedef std::pair cache_pair; + typedef c_Key key_type; + typedef c_Data data_type; + typedef boost::weak_ptr weak_data_ptr; + typedef boost::shared_ptr data_ptr; protected: + + typedef std::pair cache_entry; + typedef std::pair cache_pair; + typedef boost::unordered_map cache_type; + typedef typename cache_type::iterator cache_iterator; + typedef boost::unordered_map map_type; + typedef typename map_type::iterator map_iterator; + mutable boost::recursive_mutex mLock; - std::string mName; - int mTargetSize, mTargetAge; + std::string mName; // Used for logging + int mTargetSize; // Desired number of cache entries + int mTargetAge; // Desired maximum cache age - boost::unordered_map mCache; // Hold strong reference to recent objects - time_t mLastSweep; - - boost::unordered_map mMap; // Track stored objects + cache_type mCache; // Hold strong reference to recent objects + map_type mMap; // Track stored objects + time_t mLastSweep; public: TaggedCache(const char *name, int size, int age) @@ -103,7 +108,7 @@ template void TaggedCache::sweep // Pass 1, remove old objects from cache int cacheRemovals = 0; - typename boost::unordered_map::iterator cit = mCache.begin(); + cache_iterator cit = mCache.begin(); while (cit != mCache.end()) { if (cit->second.first < target) @@ -117,7 +122,7 @@ template void TaggedCache::sweep // Pass 2, remove dead objects from map int mapRemovals = 0; - typename boost::unordered_map::iterator mit = mMap.begin(); + map_iterator mit = mMap.begin(); while (mit != mMap.end()) { if (mit->second.expired()) @@ -139,7 +144,7 @@ template bool TaggedCache::touch boost::recursive_mutex::scoped_lock sl(mLock); // Is the object in the map? - typename boost::unordered_map::iterator mit = mMap.find(key); + map_iterator mit = mMap.find(key); if (mit == mMap.end()) return false; if (mit->second.expired()) @@ -149,7 +154,7 @@ template bool TaggedCache::touch } // Is the object in the cache? - typename boost::unordered_map::iterator cit = mCache.find(key); + map_iterator cit = mCache.find(key); if (cit != mCache.end()) { // in both map and cache cit->second.first = time(NULL); @@ -167,13 +172,13 @@ template bool TaggedCache::del(c if (!valid) { // remove from map too - typename boost::unordered_map::iterator mit = mMap.find(key); + map_iterator mit = mMap.find(key); if (mit == mMap.end()) // not in map, cannot be in cache return false; mMap.erase(mit); } - typename boost::unordered_map::iterator cit = mCache.find(key); + cache_iterator cit = mCache.find(key); if (cit == mCache.end()) return false; mCache.erase(cit); @@ -186,7 +191,7 @@ bool TaggedCache::canonicalize(const key_type& key, boost::shared // Return values: true=we had the data already boost::recursive_mutex::scoped_lock sl(mLock); - typename boost::unordered_map::iterator mit = mMap.find(key); + map_iterator mit = mMap.find(key); if (mit == mMap.end()) { // not in map mCache.insert(cache_pair(key, cache_entry(time(NULL), data))); @@ -194,7 +199,7 @@ bool TaggedCache::canonicalize(const key_type& key, boost::shared return false; } - boost::shared_ptr cachedData = mit->second.lock(); + data_ptr cachedData = mit->second.lock(); if (!cachedData) { // in map, but expired. Update in map, insert in cache mit->second = data; @@ -209,7 +214,7 @@ bool TaggedCache::canonicalize(const key_type& key, boost::shared data = cachedData; // Valid in map, is it in cache? - typename boost::unordered_map::iterator cit = mCache.find(key); + cache_iterator cit = mCache.find(key); if (cit != mCache.end()) { cit->second.first = time(NULL); // Yes, refesh @@ -228,11 +233,11 @@ boost::shared_ptr TaggedCache::fetch(const key_type& key) boost::recursive_mutex::scoped_lock sl(mLock); // Is it in the map? - typename boost::unordered_map::iterator mit = mMap.find(key); + map_iterator mit = mMap.find(key); if (mit == mMap.end()) return data_ptr(); // No, we're done - boost::shared_ptr cachedData = mit->second.lock(); + data_ptr cachedData = mit->second.lock(); if (!cachedData) { // in map, but expired. Sorry, we don't have it mMap.erase(mit); @@ -240,7 +245,7 @@ boost::shared_ptr TaggedCache::fetch(const key_type& key) } // Valid in map, is it in the cache? - typename boost::unordered_map::iterator cit = mCache.find(key); + cache_iterator cit = mCache.find(key); if (cit != mCache.end()) cit->second.first = time(NULL); // Yes, refresh else // No, add to cache @@ -252,17 +257,17 @@ boost::shared_ptr TaggedCache::fetch(const key_type& key) template bool TaggedCache::store(const key_type& key, const c_Data& data) { - boost::shared_ptr d = boost::make_shared(boost::cref(data)); + data_ptr d = boost::make_shared(boost::cref(data)); return canonicalize(key, d); } template bool TaggedCache::retrieve(const key_type& key, c_Data& data) { // retrieve the value of the stored data - boost::shared_ptr dataPtr = fetch(key); - if (!dataPtr) + data_ptr entry = fetch(key); + if (!entry) return false; - data = *dataPtr; + data = *entry; return true; }