LocARNA-1.9.2
src/LocARNA/type_wrapper.hh
00001 #ifndef LOCARNA_TYPE_WRAPPER_HH
00002 #define LOCARNA_TYPE_WRAPPER_HH
00003 
00004 #ifdef HAVE_CONFIG_H
00005 #include <config.h>
00006 #endif
00007 
00008 namespace LocARNA {
00015     template <class T>
00016     class type_wrapper {
00017         T val_;
00018 
00019     public:
00023         type_wrapper() : val_() {}
00024 
00028         explicit type_wrapper(const T &i) : val_(i) {}
00029 
00033         type_wrapper(const type_wrapper &idx) : val_(idx.val()) {}
00034 
00043         const T &
00044         val() const {
00045             return val_;
00046         }
00047 
00053         bool
00054         operator==(const type_wrapper &x) const {
00055             return val_ == x.val_;
00056         }
00057 
00063         bool
00064         operator!=(const type_wrapper &x) const {
00065             return val_ != x.val_;
00066         }
00067 
00073         bool
00074         operator<=(const type_wrapper &x) const {
00075             return val_ <= x.val_;
00076         }
00077 
00083         bool
00084         operator<(const type_wrapper &x) const {
00085             return val_ < x.val_;
00086         }
00087 
00093         bool
00094         operator>=(const type_wrapper &x) const {
00095             return val_ >= x.val_;
00096         }
00097 
00103         bool
00104         operator>(const type_wrapper &x) const {
00105             return val_ > x.val_;
00106         }
00107 
00113         type_wrapper
00114         operator+(const type_wrapper &x) const {
00115             return type_wrapper(val_ + x.val_);
00116         }
00117 
00123         type_wrapper
00124         operator-(const type_wrapper &x) const {
00125             return type_wrapper(val_ - x.val_);
00126         }
00127 
00133         type_wrapper
00134         operator+(const T &x) const {
00135             return type_wrapper(val_ + x);
00136         }
00137 
00143         type_wrapper
00144         operator-(const T &x) const {
00145             return type_wrapper(val_ - x);
00146         }
00147 
00152         const type_wrapper &operator++() {
00153             ++val_;
00154             return *this;
00155         }
00156 
00161         const type_wrapper &operator--() {
00162             --val_;
00163             return *this;
00164         }
00165 
00170         const type_wrapper &operator++(int) {
00171             type_wrapper<T> tmp(*this);
00172             ++val_;
00173             return tmp;
00174         }
00175 
00180         const type_wrapper &operator--(int) {
00181             type_wrapper<T> tmp(*this);
00182             --val_;
00183             return tmp;
00184         }
00185 
00186     }; // end class type_wrapper
00187 
00188     template <class T>
00189     std::ostream &
00190     operator<<(std::ostream &out, const type_wrapper<T> &x) {
00191         out << x.val();
00192         return out;
00193     }
00194 
00195 } // end namespace LocARNA
00196 
00197 #endif // LOCARNA_TYPE_WRAPPER_HH
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends