00001
00002 #ifndef GAUDIKERNEL_PROPERTYVERIFIER_H
00003 #define GAUDIKERNEL_PROPERTYVERIFIER_H
00004
00005
00006
00007
00008
00009
00016 template< class T >
00017 class PropertyVerifier {
00018 public:
00019
00020
00021
00022 virtual ~PropertyVerifier() { }
00023
00024
00025
00026
00027 virtual bool isValid( const T* value ) const = 0;
00028 };
00029
00037 template< class T >
00038 class BoundedVerifier : PropertyVerifier< T > {
00039 public:
00041 BoundedVerifier()
00042 : m_hasLowerBound( false ),
00043 m_hasUpperBound( false ),
00044 m_lowerBound( T() ),
00045 m_upperBound( T() ) { }
00046
00048 virtual ~BoundedVerifier() { }
00049
00051 bool isValid( const T* value ) const {
00052 return (( m_hasLowerBound && ( *value < m_lowerBound ) ) ? false : true )
00053 && (( m_hasUpperBound && ( *value > m_upperBound ) ) ? false : true );
00054 }
00055
00057 bool hasLower() const { return m_hasLowerBound; }
00059 bool hasUpper() const { return m_hasUpperBound; }
00061 const T& lower() const { return m_lowerBound; }
00063 const T& upper() const { return m_upperBound; }
00064
00066 void setLower( const T& value ) { m_hasLowerBound = true; m_lowerBound = value; }
00068 void setUpper( const T& value ) { m_hasUpperBound = true; m_upperBound = value; }
00070 void clearLower() { m_hasLowerBound = false; m_lowerBound = T(); }
00072 void clearUpper() { m_hasUpperBound = false; m_upperBound = T(); }
00073
00075 void setBounds( const T& lower, const T& upper) {
00076 setLower( lower );
00077 setUpper( upper );
00078 }
00079
00081 void clearBounds() {
00082 clearLower();
00083 clearUpper();
00084 }
00085
00086 private:
00089 bool m_hasLowerBound;
00090 bool m_hasUpperBound;
00091 T m_lowerBound;
00092 T m_upperBound;
00093 };
00094
00101 template< class T >
00102 class NullVerifier : public BoundedVerifier< T > {
00103 public:
00104
00105 static const NullVerifier< T >& theNullVerifier();
00106
00107
00108
00109
00110 virtual ~NullVerifier() { };
00111
00112
00113
00114
00115
00116 virtual bool isValid( const T* ) const { return true; }
00117 };
00118
00119 #endif // GAUDIKERNEL_PROPERTYVERIFIER_H
00120