|
Gaudi Framework, version v21r9 |
| Home | Generated: 3 May 2010 |
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