00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef OLENA_LEVEL_LUT_HH
00029 # define OLENA_LEVEL_LUT_HH
00030
00031 # include <oln/basics.hh>
00032
00033 # include <map>
00034
00035 namespace oln {
00036
00037 namespace level {
00038
00053 template<class T, class T2 = T>
00054 class hlut
00055 {
00056 typedef std::map<T,T2> hmap_t;
00057
00058 public:
00059 typedef T2 output_t;
00060
00061 hlut()
00062 {}
00063
00069 hlut&
00070 set(const T& val, const T2& newval)
00071 {
00072 hmap_[val] = newval;
00073 return *this;
00074 }
00075
00080 const T2
00081 operator()(const T& val) const
00082 {
00083 static typename hmap_t::const_iterator i;
00084 i = hmap_.find(val);
00085 return i != hmap_.end() ? i->second : val;
00086 }
00087
00088 private:
00089 hmap_t hmap_;
00090 };
00091
00092
00110 template<class T, class T2 = T>
00111 class hlut_def
00112 {
00113 typedef std::map<T,T2> hmap_t;
00114
00115 public:
00116 typedef T2 output_t;
00117
00118 hlut_def()
00119 {
00120 defaultval_ = T2();
00121 }
00122
00128 hlut_def&
00129 set(const T& val, const T2& newval)
00130 {
00131 hmap_[val] = newval;
00132 return *this;
00133 }
00134
00136 hlut_def&
00137 set_default(const T2& defaultval)
00138 {
00139 defaultval_ = defaultval;
00140 return *this;
00141 }
00142
00147 const T2
00148 operator()(const T& val) const
00149 {
00150 static typename hmap_t::const_iterator i;
00151 i = hmap_.find(val);
00152 return i != hmap_.end() ? i->second : defaultval_;
00153 }
00154
00155 private:
00156 hmap_t hmap_;
00157 T2 defaultval_;
00158 };
00159
00160 }
00161
00162 }
00163
00164 #endif // ! OLENA_LEVEL_LUT_HH