00001 #ifndef PROTON_CPP_CACHED_MAP_H
00002 #define PROTON_CPP_CACHED_MAP_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "./config.hpp"
00026 #include "./export.hpp"
00027 #include "./pn_unique_ptr.hpp"
00028
00029 #include <cstddef>
00030
00031 namespace proton {
00032
00033 namespace codec {
00034 class decoder;
00035 class encoder;
00036 }
00037
00038 namespace internal {
00039
00040 template <class key_type, class value_type>
00041 class map_type_impl;
00042
00046 template <class K, class V>
00047 class cached_map;
00048
00049 template <class K, class V>
00050 PN_CPP_EXTERN proton::codec::decoder& operator>>(proton::codec::decoder& d, cached_map<K,V>& m);
00051 template <class K, class V>
00052 PN_CPP_EXTERN proton::codec::encoder& operator<<(proton::codec::encoder& e, const cached_map<K,V>& m);
00053
00054 template <class key_type, class value_type>
00055 class PN_CPP_CLASS_EXTERN cached_map {
00056 typedef map_type_impl<key_type, value_type> map_type;
00057
00058 public:
00059 PN_CPP_EXTERN cached_map();
00060 PN_CPP_EXTERN cached_map(const cached_map& cm);
00061 PN_CPP_EXTERN cached_map& operator=(const cached_map& cm);
00062 #if PN_CPP_HAS_RVALUE_REFERENCES
00063 PN_CPP_EXTERN cached_map(cached_map&&);
00064 PN_CPP_EXTERN cached_map& operator=(cached_map&&);
00065 #endif
00066 PN_CPP_EXTERN ~cached_map();
00067
00068 PN_CPP_EXTERN value_type get(const key_type& k) const;
00069 PN_CPP_EXTERN void put(const key_type& k, const value_type& v);
00070 PN_CPP_EXTERN size_t erase(const key_type& k);
00071 PN_CPP_EXTERN bool exists(const key_type& k) const;
00072 PN_CPP_EXTERN size_t size();
00073 PN_CPP_EXTERN void clear();
00074 PN_CPP_EXTERN bool empty();
00075
00077 private:
00078 pn_unique_ptr<map_type> map_;
00079
00080 void make_cached_map();
00081
00082 friend PN_CPP_EXTERN proton::codec::decoder& operator>> <>(proton::codec::decoder& d, cached_map<key_type, value_type>& m);
00083 friend PN_CPP_EXTERN proton::codec::encoder& operator<< <>(proton::codec::encoder& e, const cached_map<key_type, value_type>& m);
00085 };
00086
00087
00088 }
00089 }
00090
00091 #endif // PROTON_CPP_CACHED_MAP_H