/* -*- c++ -*- */ #ifndef JAWS_CACHE_LIST_T_H #define JAWS_CACHE_LIST_T_H #include "ace/Malloc.h" #include "JAWS/Cache_Object.h" // Forward declarations template class JAWS_Cache_Manager; template class JAWS_Cache_List_Item; template class JAWS_Cache_List // Roll my own heap here. Eventually, a heap should be its own // standalone data structure. // // This version is not a heap, but a doubly linked list. We are // trying to simplify all the heap operations to be O(1). { public: typedef JAWS_Cache_Manager Cache_Manager; typedef JAWS_Cache_List_Item Cache_List_Item; JAWS_Cache_List (ACE_Allocator *alloc = 0, size_t maxsize = 8192); // maxsize is the total number of objects the in memory cache is // willing to manage ~JAWS_Cache_List (); int is_empty () const; int is_full () const; size_t size () const; size_t maxsize () const; int maxsize (Cache_Manager *cm, size_t new_maxsize); // attempt to grow (or shrink) the heap. Return 0 on success, -1 on // error. int insert (const EXT_ID &ext_id, JAWS_Cache_Object *const &int_id); // attempt to insert int_id into heap. int remove (EXT_ID &ext_id, JAWS_Cache_Object *&int_id); // attempt to remove the top element of heap. int remove (void *item); // treat item as a Cache_List_Item, and remove it from the heap int adjust (void *item); // treat item as a Cache_List_Item, and alter its heap position protected: void insert_i (Cache_List_Item *item); // insert item into heap. void remove_i (Cache_List_Item *item); // remove the element residing at pos, but do not delete it. void remove_i (); // remove the element residing at the top of heap, but do not delete it. private: ACE_Allocator *allocator_; size_t maxsize_; size_t size_; Cache_List_Item *item_; Cache_List_Item *head_; Cache_List_Item *tail_; }; template class JAWS_Cache_List_Item { friend class JAWS_Cache_List; public: typedef JAWS_Cache_List Cache_List; JAWS_Cache_List_Item (const EXT_ID &ext_id, JAWS_Cache_Object *const &int_id); unsigned int priority (); private: EXT_ID ext_id_; JAWS_Cache_Object *int_id_; JAWS_Cache_List_Item *next_; JAWS_Cache_List_Item *prev_; }; #include "JAWS/Cache_List_T.cpp" #endif /* JAWS_CACHE_LIST_T_H */