Go to the documentation of this file.00001 #ifndef Cache_H
00002 #define Cache_H
00003 #include <map>
00004 #include <queue>
00005
00006 using namespace std;
00007
00008 template <class T>
00009
00010
00011 #define upperLimit 5000
00012
00013 class Cache
00014 {
00015 private:
00016 map<string, T> keyToValue;
00017 queue<string> keyQueue;
00018 public:
00019 Cache()
00020 {
00021 }
00022 virtual ~Cache()
00023 {
00024
00025 }
00026
00027 void put(string key, T value)
00028 {
00029 if(keyQueue.size() >= upperLimit)
00030 {
00031 string toDelete = keyQueue.front();
00032 keyToValue.erase(toDelete);
00033 keyQueue.pop();
00034 }
00035 keyToValue[key] = value;
00036 keyQueue.push(key);
00037 }
00038 bool hasKey(string key)
00039 {
00040 return keyToValue.find(key) != keyToValue.end();
00041 }
00042
00043 T& get(string key)
00044 {
00045 return keyToValue[key];
00046 }
00047
00048 void purge()
00049 {
00050 keyToValue.clear();
00051 while(!keyQueue.empty())
00052 {
00053 keyQueue.pop();
00054 }
00055 }
00056
00057 };
00058
00059 #endif