00001 00008 #ifndef CDAT_H 00009 #define CDAT_H 1 00010 00011 #include <boost/operators.hpp> 00012 #include <iostream> 00013 00019 template <class T> 00020 class CDatT 00021 : boost::operators<CDatT<T> > 00022 { 00023 public: 00033 CDatT() 00034 {} 00035 00045 ~CDatT() 00046 {} 00047 00057 CDatT(const CDatT& other) 00058 : m_value(other.m_value) 00059 {} 00060 00070 CDatT(T newval) 00071 : m_value(newval) 00072 {} 00073 00083 T getValue() const 00084 { 00085 return m_value; 00086 } 00087 00097 operator T() 00098 { 00099 return m_value; 00100 } 00101 00111 bool operator<(const CDatT& x) const 00112 { 00113 return m_value < x.m_value; 00114 } 00115 00125 bool operator==(const CDatT& x) const 00126 { 00127 return m_value == x.m_value; 00128 } 00129 00139 CDatT& operator+=(const CDatT& x) 00140 { 00141 m_value += x.m_value; 00142 return *this; 00143 } 00144 00154 CDatT& operator-=(const CDatT& x) 00155 { 00156 m_value -= x.m_value; 00157 return *this; 00158 } 00159 00169 CDatT& operator*=(const CDatT& x) 00170 { 00171 m_value *= x.m_value; 00172 return *this; 00173 } 00174 00184 CDatT& operator/=(const CDatT& x) 00185 { 00186 m_value /= x.m_value; 00187 return *this; 00188 } 00189 00199 CDatT& operator%=(const CDatT& x) 00200 { 00201 m_value %= x.m_value; 00202 return *this; 00203 } 00204 00214 CDatT& operator|=(const CDatT& x) 00215 { 00216 m_value |= x.m_value; 00217 return *this; 00218 } 00219 00229 CDatT& operator&=(const CDatT& x) 00230 { 00231 m_value &= x.m_value; 00232 return *this; 00233 } 00234 00244 CDatT& operator^=(const CDatT& x) 00245 { 00246 m_value ^= x.m_value; 00247 return *this; 00248 } 00249 00259 CDatT& operator++() 00260 { 00261 m_value++; 00262 return *this; 00263 } 00264 00274 CDatT& operator--() 00275 { 00276 m_value--; 00277 return *this; 00278 } 00279 00290 friend std::ostream& operator<<(std::ostream& stream, CDatT cdat) 00291 { 00292 stream << cdat.m_value; 00293 return stream; 00294 } 00295 00306 friend std::istream& operator>>(std::istream & stream, CDatT& cdat) 00307 { 00308 stream >> cdat.m_value; 00309 return stream; 00310 } 00311 00312 private: 00313 /* members */ 00314 T m_value; 00315 }; 00316 00322 typedef CDatT<int> CDat; 00323 00324 #endif 00325 00326 /* vim: set et sw=2 ts=2: */