Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00030 #ifndef __CLAW_MULTI_TYPE_MAP_HPP__
00031 #define __CLAW_MULTI_TYPE_MAP_HPP__
00032
00033 #include <claw/meta/no_type.hpp>
00034 #include <claw/meta/type_list.hpp>
00035 #include <map>
00036
00037 namespace claw
00038 {
00059 template<typename ValueType, typename Map>
00060 class multi_type_map_wrapper;
00061
00081 template<typename Key, typename TypeList>
00082 class multi_type_map;
00083
00087 template<typename Key>
00088 class multi_type_map<Key, meta::no_type>
00089 {
00090
00091 };
00092
00093
00094
00095
00096 template<typename Key, typename Head, typename Tail>
00097 class multi_type_map< Key, meta::type_list<Head, Tail> >:
00098 public multi_type_map<Key, Tail>
00099 {
00100 public:
00101 typedef Key key_type;
00102 typedef Head value_type;
00103 typedef meta::type_list<Head, Tail> value_type_list;
00104 typedef multi_type_map< Key, meta::type_list<Head, Tail> > self_type;
00105 typedef std::map<key_type, value_type> container_type;
00106 typedef multi_type_map<Key, Tail> super;
00107
00108 friend struct multi_type_map_wrapper<value_type, self_type>;
00109
00112 template<typename ValueType>
00113 struct iterator
00114 {
00116 typedef typename std::map<key_type, ValueType>::iterator type;
00117
00119 typedef
00120 typename std::map<key_type, ValueType>::const_iterator const_type;
00121 };
00122
00123 private:
00124 typedef typename iterator<value_type>::type iterator_type;
00125 typedef typename iterator<value_type>::const_type const_iterator_type;
00126
00127 public:
00128 template<typename ValueType>
00129 const ValueType& get( const key_type& k ) const;
00130
00131 template<typename ValueType>
00132 void set( const key_type& k, const ValueType& v );
00133
00134 template<typename ValueType>
00135 bool exists( const key_type& k ) const;
00136
00137 template<typename ValueType>
00138 typename iterator<ValueType>::type begin();
00139
00140 template<typename ValueType>
00141 typename iterator<ValueType>::type end();
00142
00143 template<typename ValueType>
00144 typename iterator<ValueType>::const_type begin() const;
00145
00146 template<typename ValueType>
00147 typename iterator<ValueType>::const_type end() const;
00148
00149 private:
00151 container_type m_data;
00152
00153 };
00154
00155 }
00156
00157 #include <claw/impl/multi_type_map.tpp>
00158
00159 #endif // __CLAW_MULTI_TYPE_MAP_HPP__