19 #ifndef GNASH_MOVIELIBRARY_H
20 #define GNASH_MOVIELIBRARY_H
25 #include <boost/intrusive_ptr.hpp>
29 #include <boost/thread/thread.hpp>
44 boost::intrusive_ptr<movie_definition>
def;
61 void setLimit(LibraryContainer::size_type limit)
67 bool get(
const std::string& key,
68 boost::intrusive_ptr<movie_definition>* ret)
70 boost::mutex::scoped_lock lock(_mapMutex);
71 LibraryContainer::iterator it = _map.find(key);
72 if (it == _map.end())
return false;
74 *ret = it->second.def;
75 it->second.hitCount++;
84 if (_limit) limitSize(_limit - 1);
91 boost::mutex::scoped_lock lock(_mapMutex);
98 boost::mutex::scoped_lock lock(_mapMutex);
104 static bool findWorstHitCount(
const LibraryContainer::value_type&
a,
105 const LibraryContainer::value_type&
b)
107 return (a.second.hitCount < b.second.hitCount);
113 void limitSize(LibraryContainer::size_type max) {
120 while (_map.size() > max) {
121 boost::mutex::scoped_lock lock(_mapMutex);
122 _map.erase(std::min_element(_map.begin(), _map.end(),
123 &findWorstHitCount));
128 mutable boost::mutex _mapMutex;