diff options
Diffstat (limited to 'ACE/apps/JAWS2/JAWS/Cache_Manager_T.h')
-rw-r--r-- | ACE/apps/JAWS2/JAWS/Cache_Manager_T.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/ACE/apps/JAWS2/JAWS/Cache_Manager_T.h b/ACE/apps/JAWS2/JAWS/Cache_Manager_T.h new file mode 100644 index 00000000000..10165a462a5 --- /dev/null +++ b/ACE/apps/JAWS2/JAWS/Cache_Manager_T.h @@ -0,0 +1,179 @@ +/* -*- c++ -*- */ +// Hey Emacs! This is a C++ file! +// $Id$ + +#ifndef JAWS_CACHE_MANAGER_T_H +#define JAWS_CACHE_MANAGER_T_H + +#include "ace/Singleton.h" + +#include "JAWS/Cache_Object.h" + +template <class KEY, class HASH_FUNC, class EQ_FUNC> class JAWS_Cache_Hash; +template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> +class JAWS_Cache_Heap; +template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> +class JAWS_Cache_List; + +template <class KEY, class FACTORY, class HASH_FUNC, class EQ_FUNC> +class JAWS_Cache_Manager +{ + + friend class JAWS_Cache_Hash<KEY, HASH_FUNC, EQ_FUNC>; + friend class JAWS_Cache_Heap<KEY, FACTORY, HASH_FUNC, EQ_FUNC>; + friend class JAWS_Cache_List<KEY, FACTORY, HASH_FUNC, EQ_FUNC>; + +public: + + typedef ACE_Singleton<FACTORY, ACE_SYNCH_MUTEX> Object_Factory; + typedef JAWS_Cache_Hash<KEY, HASH_FUNC, EQ_FUNC> Cache_Hash; + typedef JAWS_Cache_List<KEY, FACTORY, HASH_FUNC, EQ_FUNC> Cache_Heap; + + JAWS_Cache_Manager (ACE_Allocator *alloc = 0, + JAWS_Cache_Object_Factory *cof = 0, + + size_t hashsize = 8192, // number of hash buckets + size_t maxsize = 65535, // max number of in memory + // objects + + size_t maxobjsize = 256, // max cached object size in kB + size_t minobjsize = 0, // min cached object size in kB + + size_t highwater = 100, // max size of cache in MB + size_t lowwater = 50, // min size of cache when + // expiring after highwater + // has been reached + + int timetolive = -1, // amt of time the lowest + // priority item is allowed to + // remain in the cache + + int counted = 0 // flag for whether to use + // counts + ); + + int open (ACE_Allocator *alloc = 0, + JAWS_Cache_Object_Factory *cof = 0, + + size_t hashsize = 1024, // number of hash buckets + size_t maxsize = 4096, // max number of in memory + // objects + + size_t maxobjsize = 5120, // max cached object size in kB + size_t minobjsize = 0, // min cached object size in kB + + size_t highwater = 50, // max size of cache in MB + size_t lowwater = 30, // min size of cache when + // expiring after highwater + // has been reached + + int timetolive = -1, // amount of time the lowest + // priority item is allowed to + // remain in the cache + + int counted = 0 // flag for whether to use + // counts + ); + + ~JAWS_Cache_Manager (void); + + int close (void); + + // Search Methods + + int GET (const KEY &key, JAWS_Cache_Object *&cobj); + // Retrieve the object associated with key from cache. Return 0 on + // success, -1 on failure. + + int PUT (const KEY &key, const void *data, size_t size, + JAWS_Cache_Object *&obj); + // Inserts or replaces object associated with key into cache. + // Return 0 on success, -1 on failure. + + int MAKE (const void *data, size_t size, JAWS_Cache_Object *&cobj); + // Create a cached object, increment reference count. + + int TAKE (JAWS_Cache_Object *const &cobj); + // Increment reference count. + + int DROP (JAWS_Cache_Object *&cobj); + // Decrement reference count on cached object, perhaps delete. + // Returns 0 if only decremented, 1 if deleted, -1 if error. + + int FLUSH (void); + // Removes lowest priority object from cache. + +protected: + + int GET_i (const KEY &key, JAWS_Cache_Object *&object); + // Retrieve the object associated with key from cache. Return 0 on + // success, -1 on failure. + + int PUT_i (const KEY &key, const void *data, size_t size, + JAWS_Cache_Object *&object); + // Inserts or replaces object associated with key into cache. + // Return 0 on success, -1 on failure. + + int FLUSH_i (void); + // Removes lowest priority object from cache. + + int FLUSH_i (const KEY &key); + // Removes object associated with key from cache. + + int DROP_i (JAWS_Cache_Object *&cobj); + // Decrement reference count on cached object, perhaps delete. + +private: + + ACE_Allocator *allocator_; + JAWS_Cache_Object_Factory *factory_; + + size_t hashsize_; + size_t maxsize_; + size_t maxobjsize_; + size_t minobjsize_; + size_t highwater_; + size_t lowwater_; + size_t waterlevel_; + int timetolive_; + int counted_; + + Cache_Hash *hash_; + Cache_Heap *heap_; + + ACE_SYNCH_RW_MUTEX lock_; + +}; + + +template <class KEY, class DATA, class CACHE_MANAGER> +class JAWS_Cache_Proxy +{ +public: + typedef CACHE_MANAGER Cache_Manager; + typedef ACE_Singleton<Cache_Manager, ACE_SYNCH_MUTEX> + Cache_Manager_Singleton; + + JAWS_Cache_Proxy (const KEY &, Cache_Manager * = 0); + // Corresponds to a GET + + JAWS_Cache_Proxy (const KEY &, DATA *, size_t, Cache_Manager * = 0); + // Corresponds to a U/PUT + + virtual ~JAWS_Cache_Proxy (void); + + DATA *data (void) const; + operator DATA * (void) const; + + virtual int close (DATA *); + +private: + JAWS_Cache_Object *object_; + Cache_Manager *manager_; +}; + +#if defined (ACE_TEMPLATES_REQUIRE_SOURCE) +#include "JAWS/Cache_Manager_T.cpp" +#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */ + +#endif /* JAWS_CACHE_MANAGER_T_H */ |