Gaudi Framework, version v21r9

Home   Generated: 3 May 2010

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 

Generated at Mon May 3 12:14:24 2010 for Gaudi Framework, version v21r9 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004