00001 #ifndef __NEWS_SVC_DEC_IMPL__ 00002 #define __NEWS_SVC_DEC_IMPL__ 00003 00014 #include "newsobject.h" 00015 #include "newssvcdec.h" 00016 #include <map> 00017 #include <list> 00018 #ifdef __cplusplus 00019 extern "C" { 00020 #endif 00021 00022 #define NEWS_SVC_MAGIC_ID 0x786245 00023 00024 typedef std::map<unsigned long, NewsObject*> NEWS_SVC_DEC_IMPL_map_t; 00025 typedef std::list<unsigned short> NEWS_SVC_DEC_IMPL_watch_list_t; 00026 typedef std::list<unsigned short> NEWS_SVC_DEC_IMPL_keep_in_cache_list_t; 00027 00028 typedef struct 00029 { 00030 unsigned long d_magicId; 00031 NEWS_SVC_DEC_cb *d_update; 00032 void *d_arg; 00033 unsigned long d_extended_header_len; 00034 unsigned long d_max_memory; 00035 unsigned long d_max_objects; 00036 unsigned long d_object_count; 00037 00038 NEWS_SVC_DEC_IMPL_map_t d_news_map; 00039 00040 NEWS_SVC_DEC_IMPL_watch_list_t d_watch_list; 00041 NEWS_SVC_DEC_IMPL_keep_in_cache_list_t d_keep_in_cache_list; 00042 } NEWS_SVC_DEC_IMPL_t; 00043 00044 int NEWS_SVC_DEC_IMPL_garbage_collection(NEWS_SVC_DEC_IMPL_t *dec, 00045 unsigned long objs_to_free); 00046 00047 #ifdef __cplusplus 00048 } 00049 #endif 00050 00051 /* internal functions */ 00052 void NEWS_SVC_DEC_IMPL_printObjList(NEWS_SVC_DEC_IMPL_t *dec); 00053 00054 class FindMinFunctor 00055 { 00056 public: 00057 FindMinFunctor(NEWS_SVC_DEC_IMPL_t *dec); 00058 FindMinFunctor(const FindMinFunctor &rhs); 00059 ~FindMinFunctor(); 00060 00061 bool operator()( 00062 std::pair<const unsigned long, NewsObject*> &rhs, 00063 std::pair<const unsigned long, NewsObject*> &lhs); 00064 00065 private: 00066 NEWS_SVC_DEC_IMPL_t *d_dec; 00067 }; 00068 00069 00070 #endif /* __NEWS_SVC_DEC_IMPL */