Go to the documentation of this file.00001
00002
00003
00004 #ifndef UTILMM_SMART_UNIQ_MEMORY_HEADER
00005 # define UTILMM_SMART_UNIQ_MEMORY_HEADER
00006
00007 #include "utilmm/hash/hash_map.hh"
00008
00009 namespace utilmm {
00010 namespace smart {
00011 namespace ref_count {
00012
00028 template<typename Ty, class Hash>
00029 struct hash_ptr
00030 :public std::unary_function<Ty const *, size_t> {
00041 size_t operator()(Ty const *arg) const;
00042 };
00043
00044
00059 template<typename Ty, class Equal>
00060 struct eq_ptr
00061 :public std::binary_function<Ty const *, Ty const *, bool> {
00074 bool operator()(Ty const *a, Ty const *b) const;
00075 };
00076
00096 template<typename Ty, class Hash, class Equal>
00097 class uniq_memory {
00098 public:
00100 typedef Ty const base_type;
00101
00102 private:
00103 typedef hash_map< base_type *, size_t, hash_ptr<Ty, Hash>,
00104 eq_ptr<Ty, Equal> > mem_type;
00105
00106 mem_type the_mem;
00107
00108 public:
00110 typedef typename mem_type::iterator mem_cell;
00111
00118 mem_cell null_cell() {
00119 return the_mem.end();
00120 }
00121
00134 mem_cell create(base_type *ptr);
00135
00143 void destroy(mem_cell c);
00144 };
00145
00146 }
00147 }
00148 }
00149
00150 # define IN_UTILMM_SMART_UNIQ_MEMORY_HEADER
00151 #include "utilmm/smart/bits/uniq_memory.tcc"
00152 # undef IN_UTILMM_SMART_UNIQ_MEMORY_HEADER
00153 #endif // UTILMM_SMART_UNIQ_MEMORY_HEADER
00154