mycpu/cdat.h

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: */

Generated on Thu May 14 18:19:16 2009 for mycpu by  doxygen 1.5.3