00001 #ifdef CH_LANG_CC
00002
00003
00004
00005
00006
00007
00008
00009 #endif
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef _GENERICARITHMETIC_H_
00025 #define _GENERICARITHMETIC_H_
00026
00027 #include "BaseNamespaceHeader.H"
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051
00052
00053 template<typename ScalarT, typename SelfT>
00054 struct GenericArithmeticable
00055 {
00056
00057 virtual ~GenericArithmeticable()
00058 {
00059 }
00060 typedef ScalarT scalar_type;
00061 typedef SelfT self_type;
00062
00063 public:
00064 GenericArithmeticable( SelfT * s ) : m_child( s )
00065 {
00066 }
00067
00068 bool operator<(const SelfT&) const;
00069 bool operator>(const SelfT&) const;
00070 bool operator<=(const SelfT&) const;
00071 bool operator>=(const SelfT&) const;
00072
00073 SelfT& operator+=(const SelfT&);
00074 SelfT& operator+=(const ScalarT&);
00075 SelfT& operator-=(const SelfT&);
00076 SelfT& operator-=(const ScalarT&);
00077 SelfT& operator*=(const SelfT&);
00078 SelfT& operator*=(const ScalarT&);
00079 SelfT& operator/=(const SelfT&);
00080 SelfT& operator/=(const ScalarT&);
00081
00082 private:
00083 SelfT * m_child;
00084 };
00085
00086
00087
00088
00089
00090
00091
00092
00093 template<class C> typename C::self_type operator+( const C&, const C& );
00094 template<class C> typename C::self_type operator+( const C&, const typename C::scalar_type& );
00095 template<class C> typename C::self_type operator+( const typename C::scalar_type&, const C& );
00096
00097 template<class C> typename C::self_type operator*( const C&, const C& );
00098 template<class C> typename C::self_type operator*( const C&, const typename C::scalar_type& );
00099 template<class C> typename C::self_type operator*( const typename C::scalar_type&, const C& );
00100
00101 template<class C> typename C::self_type operator-( const C&, const C& );
00102 template<class C> typename C::self_type operator-( const C&, const typename C::scalar_type& );
00103 template<class C> typename C::self_type operator-( const typename C::scalar_type&, const C& );
00104
00105 template<class C> typename C::self_type operator/( const C&, const C& );
00106 template<class C> typename C::self_type operator/( const C&, const typename C::scalar_type& );
00107 template<class C> typename C::self_type operator/( const typename C::scalar_type&, const C& );
00108
00109 #include "BaseNamespaceFooter.H"
00110
00111 #include "GenericArithmeticI.H"
00112
00113 #endif // include guard