Cache::ApplyResult Cache::applyPolicy( CachePolicy& cachePolicy ) const { ReadLock readLock( mutex_, boost::try_to_lock ); if( !readLock.owns_lock() ) return AR_CACHEBUSY; if( cacheMap_.empty() || !cachePolicy.willPolicyBeActivated( *this ) ) return AR_NOTACTIVATED; std::vector< CacheObject* > cacheObjectList; cacheObjectList.reserve( cacheMap_.size() ); for( CacheMap::const_iterator it = cacheMap_.begin(); it != cacheMap_.end(); ++it ) { CacheObject* object = it->second.get(); if( object && object->isValid() && object->isLoaded_() ) { cacheObjectList.push_back( object ); } } if( cacheObjectList.empty() ) return AR_EMPTY; std::vector< CacheObject * > modifiedList; cachePolicy.apply_( *this, cacheObjectList, modifiedList ); unloadCacheObjectsWithPolicy_( cachePolicy, modifiedList ); return AR_ACTIVATED; }