| # Gaudi Framework, version v22r0 |

Home |  | Generated: 9 Feb 2011

# PropertyVerifier.h

Go to the documentation of this file.

    00001 // $Id:$
    00002 // ============================================================================
    00003 #ifndef GAUDIKERNEL_PROPERTYVERIFIER_H
    00004 #define GAUDIKERNEL_PROPERTYVERIFIER_H
    00005 // ============================================================================
    00006 // Include files
    00007 // ============================================================================
    00008 // STD& STL
    00009 // ============================================================================
    00010 #include <algorithm>
    00011 // ============================================================================
    00012 // GaudiKernel
    00013 // ============================================================================
    00014 #include "GaudiKernel/PropertyTypeTraits.h"
    00015 // ============================================================================
    00016 /**********************************************************
    00017  * Verifier Classes are used with Property Classes to
    00018  * provide validation criteria for Property values.
    00019  *
    00020  **********************************************************/
    00026 template< class T >
    00027 class PropertyVerifier
    00028 {
    00029 public:
    00030   // Data and Function Members for Collaborators.
    00031   // Constructors - compiler generated default is ok
    00032   // Destructor
    00033   virtual ~PropertyVerifier() { }
    00034
    00035   // Copy Constructor - compiler generated default is ok
    00036   // Assignment Operator - compiler generated default is ok
    00037   // Accessor members (const)
    00038   virtual bool isValid ( const typename Gaudi::Utils::PropertyTypeTraits<T>::CVal value ) const = 0;
    00039 };
    00040 // ============================================================================
    00047 template< class T >
    00048 class NullVerifier : public PropertyVerifier< T >
    00049 {
    00050 public:
    00051   // Data and Function Members for Collaborators.
    00052   // Constructors - compiler generated default is ok
    00053   // Destructor
    00054   virtual ~NullVerifier() { };
    00055
    00056   // Copy Constructor - compiler generated default is ok
    00057   // Assignment Operator - compiler generated default is ok
    00058
    00059   // Accessor members (const)
    00060   virtual bool isValid
    00061   ( const typename Gaudi::Utils::PropertyTypeTraits<T>::CVal /* val */ ) const
    00062   { return true; }
    00063
    00064 };
    00065 // ============================================================================
    00069 template< class T >
    00070 class BoundedVerifier : public PropertyVerifier< T > {     // Abstract derived class
    00071 public:
    00073   BoundedVerifier()
    00074     : m_hasLowerBound( false ),
    00075       m_hasUpperBound( false ),
    00076       m_lowerBound( T() ),
    00077       m_upperBound( T() ) { }
    00078
    00080   virtual ~BoundedVerifier() { }
    00081
    00083   bool isValid( const typename Gaudi::Utils::PropertyTypeTraits<T>::CVal value ) const
    00084   {
    00085     return
    00086       (( m_hasLowerBound && ( *value < m_lowerBound ) ) ? false : true ) &&
    00087       (( m_hasUpperBound && ( *value > m_upperBound ) ) ? false : true )  ;
    00088   }
    00089
    00091   bool        hasLower() const { return m_hasLowerBound; }
    00093   bool        hasUpper() const { return m_hasUpperBound; }
    00095   const T&    lower()    const { return m_lowerBound; }
    00097   const T&    upper()    const { return m_upperBound; }
    00098
    00100   void setLower( const T& value ) { m_hasLowerBound = true; m_lowerBound = value; }
    00102   void setUpper( const T& value ) { m_hasUpperBound = true; m_upperBound = value; }
    00104   void clearLower()  { m_hasLowerBound = false; m_lowerBound = T(); }
    00106   void clearUpper()  { m_hasUpperBound = false; m_upperBound = T(); }
    00107
    00109   void setBounds( const T& lower, const T& upper)
    00110   {
    00111     setLower( lower );
    00112     setUpper( upper );
    00113   }
    00114
    00116   void clearBounds()
    00117   {
    00118     clearLower();
    00119     clearUpper();
    00120   }
    00121
    00122 private:
    00125   bool  m_hasLowerBound;
    00126   bool  m_hasUpperBound;
    00127   T     m_lowerBound;
    00128   T     m_upperBound;
    00129 };
    00130 // ============================================================================
    00131
    00132 // =======================================================================
    00133 // The END
    00134 // =======================================================================
    00135 #endif    // GAUDIKERNEL_PROPERTYVERIFIER_H
    00136 // =======================================================================
    00137

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines