00001 // $Id: NamedRange.h,v 1.1 2008/10/10 08:06:32 marcocle Exp $ 00002 // ============================================================================ 00003 #ifndef GAUDI_NAMEDRANGE_H 00004 #define GAUDI_NAMEDRANGE_H 1 00005 // ============================================================================ 00006 // Include files 00007 // ============================================================================ 00008 // STD & STL 00009 // ============================================================================ 00010 #include <string> 00011 // ============================================================================ 00012 // GaudiUtils 00013 // ============================================================================ 00014 #include "GaudiUtils/Range.h" 00015 // ============================================================================ 00031 // ============================================================================ 00032 namespace Gaudi 00033 { 00034 // ========================================================================== 00044 template <class TYPE> 00045 class NamedRange_ : public Gaudi::Range_<TYPE> 00046 { 00047 protected: 00048 // ======================================================================== 00050 typedef Gaudi::Range_<TYPE> Base ; 00052 typedef NamedRange_<TYPE> Self ; 00053 // ======================================================================== 00054 public: 00055 // ======================================================================== 00057 NamedRange_() : Base() , m_name() {}; 00063 NamedRange_( typename Base::iterator ibegin , 00064 typename Base::iterator iend , 00065 const std::string& name = "" ) 00066 : Base ( ibegin , iend ) , m_name ( name ) {} ; 00071 NamedRange_( const Base& base , 00072 const std::string& name = "" ) 00073 : Base ( base ) , m_name ( name ) {}; 00078 NamedRange_( const typename Base::_Base& base , 00079 const std::string& name = "" ) 00080 : Base ( base ) , m_name ( name ) {}; 00085 NamedRange_( const typename Base::Container& base , 00086 const std::string& name = "" ) 00087 : Base ( base ) , m_name ( name ) {}; 00088 /* constructor of empty range/sequence 00089 * @param ibegin iterator to begin of empty sequence 00090 * @param name name of the range 00091 */ 00092 NamedRange_( typename Base::iterator ibegin , 00093 const std::string& name = "" ) 00094 : Base ( ibegin , ibegin ) , m_name ( name ) {}; 00096 ~NamedRange_(){}; 00097 // ======================================================================== 00098 public: 00099 // ======================================================================== 00101 inline NamedRange_ slice( long index1 , long index2 ) const 00102 { return NamedRange_( Base::slice ( index1 , index2 ) , m_name ) ; } 00103 // ======================================================================== 00104 public: 00105 // ======================================================================== 00107 const std::string& name() const { return m_name ; } 00109 void setName( const std::string& value ) { m_name = value ; } 00110 // ======================================================================== 00111 private: 00112 // ======================================================================== 00114 std::string m_name ; // the name associated to the range 00115 }; 00116 // ========================================================================== 00130 template <class CONTAINER> 00131 inline 00132 NamedRange_<CONTAINER> 00133 range ( const CONTAINER& cnt , 00134 const std::string& name ) 00135 { return NamedRange_<CONTAINER>( cnt.begin() , cnt.end() , name ) ; } 00136 // ========================================================================== 00137 } // end of namespace Gaudi 00138 // ============================================================================ 00139 // The END 00140 // ============================================================================ 00141 #endif // GAUDI_NAMEDRANGE_H 00142 // ============================================================================