| # Gaudi Framework, version v20r3
Generated: 24 Nov 2008

# PropertyVerifier.h

Go to the documentation of this file.

    00001 // $Header: /local/reps/Gaudi/GaudiKernel/GaudiKernel/PropertyVerifier.h,v 1.3 2006/06/06 16:16:23 hmd Exp $
    00002 #ifndef GAUDIKERNEL_PROPERTYVERIFIER_H
    00003 #define GAUDIKERNEL_PROPERTYVERIFIER_H
    00004 /**********************************************************
    00005  * Verifier Classes are used with Property Classes to
    00006  * provide validation criteria for Property values.
    00007  *
    00008  **********************************************************/
    00009
    00016 template< class T >
    00017 class PropertyVerifier {
    00018 public:
    00019   // Data and Function Members for Collaborators.
    00020   // Constructors - compiler generated default is ok
    00021   // Destructor
    00022   virtual ~PropertyVerifier() { }
    00023
    00024   // Copy Constructor - compiler generated default is ok
    00025   // Assignment Operator - compiler generated default is ok
    00026   // Accessor members (const)
    00027   virtual bool isValid( const T* value ) const = 0;
    00028 };
    00029
    00037 template< class T >
    00038 class BoundedVerifier : PropertyVerifier< T > {     // Abstract derived class
    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 PropertyVerifier< T > {
    00103 public:
    00104
    00105   // Data and Function Members for Collaborators.
    00106   // Constructors - compiler generated default is ok
    00107   // Destructor
    00108   virtual ~NullVerifier() { };
    00109
    00110   // Copy Constructor - compiler generated default is ok
    00111   // Assignment Operator - compiler generated default is ok
    00112
    00113   // Accessor members (const)
    00114   virtual bool isValid( const T* ) const { return true; }
    00115 };
    00116
    00117 #endif    // GAUDIKERNEL_PROPERTYVERIFIER_H
    00118