00001 /*---------------------------------------------------------------------\ 00002 | ____ _ __ __ ___ | 00003 | |__ / \ / / . \ . \ | 00004 | / / \ V /| _/ _/ | 00005 | / /__ | | | | | | | 00006 | /_____||_| |_| |_| | 00007 | | 00008 \---------------------------------------------------------------------*/ 00012 #ifndef ZYPP_BASE_DEFAULTINTEGRAL_H 00013 #define ZYPP_BASE_DEFAULTINTEGRAL_H 00014 00015 #include <iosfwd> 00016 #include <boost/static_assert.hpp> 00017 #include <boost/type_traits/is_integral.hpp> 00018 00020 namespace zypp 00021 { 00022 00023 00025 // 00026 // CLASS NAME : DefaultIntegral<_Tp,_Initial> 00027 // 00039 template<class _Tp, _Tp _Initial> 00040 class DefaultIntegral 00041 { 00042 public: 00043 DefaultIntegral( _Tp val_r = _Initial ) 00044 : _val( val_r ) 00045 { BOOST_STATIC_ASSERT(boost::is_integral<_Tp>::value); } 00046 00049 _Tp & get() { return _val; } 00050 _Tp get() const { return _val; } 00051 00052 operator _Tp &() { return get(); } 00053 operator _Tp () const { return get(); } 00055 00060 DefaultIntegral & operator=( _Tp rhs ) { _val = rhs; return *this; } 00061 DefaultIntegral & operator+=( _Tp rhs ) { _val += rhs; return *this; } 00062 DefaultIntegral & operator-=( _Tp rhs ) { _val -= rhs; return *this; } 00063 DefaultIntegral & operator*=( _Tp rhs ) { _val *= rhs; return *this; } 00064 DefaultIntegral & operator/=( _Tp rhs ) { _val /= rhs; return *this; } 00065 00066 DefaultIntegral & operator++(/*prefix*/) { ++_val; return *this; } 00067 DefaultIntegral & operator--(/*prefix*/) { ++_val; return *this; } 00068 00069 DefaultIntegral operator++(int/*postfix*/) { return _val++; } 00070 DefaultIntegral operator--(int/*postfix*/) { return _val--; } 00072 00073 private: 00074 _Tp _val; 00075 }; 00076 00078 } // namespace zypp 00080 #endif // ZYPP_BASE_DEFAULTINTEGRAL_H
1.5.0