#ifndef CACHE_H #define CACHE_H #include #include #include "Common.h" class WorldModelRoot; class Model; class ADT; template class GenericCache { public: GenericCache() {} static const int32 FlushLimit = 1000; void Insert(K key, T* val) { if (_items.size() > FlushLimit) Clear(); _items[key] = val; } T* Get(K key) { typename std::map::iterator itr = _items.find(key); if (itr != _items.end()) return itr->second; return NULL; } void Clear() { for (typename std::map::iterator itr = _items.begin(); itr != _items.end(); ++itr) delete itr->second; _items.clear(); } private: std::map _items; }; class CacheClass { public: CacheClass() {} GenericCache ModelCache; GenericCache WorldModelCache; GenericCache, ADT> AdtCache; void Clear() { AdtCache.Clear(); } }; extern CacheClass* Cache; #endif