Tuple.h
Go to the documentation of this file.00001
00002 #ifndef GAUDIALG_TUPLE_H
00003 #define GAUDIALG_TUPLE_H 1
00004
00005
00006
00007
00008
00009 #include <string>
00010
00011
00019
00020
00021
00029
00030
00031 #include "GaudiAlg/TupleObj.h"
00032
00033 namespace Tuples
00034 {
00035
00036 template <class ITEM> class TupleItem ;
00037
00116 class GAUDI_API Tuple
00117 {
00118 public:
00119
00124 Tuple ( TupleObj* tuple ) ;
00125
00127 Tuple ( const Tuple& tuple ) ;
00128
00130 virtual ~Tuple() ;
00131
00136 Tuple& operator=( const Tuple& tuple ) ;
00137
00141 TupleObj* operator-> () const { return tuple () ; }
00142
00144 bool valid () const { return 0 != tuple () ; }
00145
00146 protected:
00147
00149 TupleObj* tuple() const { return m_tuple ; }
00150
00151 private:
00152
00154 Tuple();
00155
00156 private:
00157
00159 TupleObj* m_tuple ;
00160
00161 };
00162
00277 template<class ITEM>
00278 class TupleColumn
00279 {
00280 public:
00281 TupleColumn ( const std::string& name ,
00282 const ITEM& value )
00283 : m_name ( name ) , m_value ( value ) {}
00284 public:
00286 const std::string& name () const { return m_name ; }
00288 const ITEM& value () const { return m_value ; }
00289 private:
00290 TupleColumn();
00291 private:
00292 std::string m_name ;
00293 ITEM m_value ;
00294 };
00295
00299 template<class ITEM>
00300 inline TupleColumn<ITEM>
00301 make_column ( const std::string& name , const ITEM& item )
00302 { return TupleColumn<ITEM> ( name , item ) ; }
00303
00307 template<class ITEM>
00308 inline TupleColumn<const ITEM*>
00309 make_column ( const std::string& name , const ITEM* item )
00310 { return TupleColumn<const ITEM*>( name , item ) ; }
00311
00315 template<class ITEM>
00316 inline TupleColumn<ITEM*>
00317 make_column ( const std::string& name , ITEM* item )
00318 { return TupleColumn<ITEM*> ( name , item ) ; }
00319
00320 template<class ITEM>
00321 inline TupleColumn<ITEM>
00322 Column ( const std::string& name , const ITEM& item )
00323 { return make_column ( name , item ) ; }
00324
00325 template<class ITEM>
00326 inline TupleColumn<const ITEM*>
00327 Column ( const std::string& name , const ITEM* item )
00328 { return make_column ( name , item ) ; }
00329
00330 template<class ITEM>
00331 inline TupleColumn<ITEM*>
00332 Column ( const std::string& name , ITEM* item )
00333 { return make_column ( name , item ) ; }
00334
00335 }
00336
00337
00339
00340 template <class ITEM>
00341 inline Tuples::Tuple& operator<<
00342 ( Tuples::Tuple& tuple ,
00343 const Tuples::TupleColumn<ITEM>& item )
00344 {
00345 if ( !tuple.valid() ) { return tuple ; }
00346 tuple->column( item.name() , item.value () ) ;
00347 return tuple ;
00348 }
00349
00350
00351
00352
00353
00354
00355
00356 #endif // GAUDIALG_TUPLE_H
00357