Go to the documentation of this file.00001 #ifndef GAUDIALG_TUPLE_H
00002 #define GAUDIALG_TUPLE_H 1
00003
00004
00005
00006
00007
00008 #include <string>
00009
00010
00018
00019
00020
00028
00029
00030 #include "GaudiAlg/TupleObj.h"
00031
00032 namespace Tuples
00033 {
00034
00035 template <class ITEM> class TupleItem ;
00036
00115 class GAUDI_API Tuple
00116 {
00117 public:
00118
00123 Tuple ( TupleObj* tuple ) ;
00124
00126 Tuple ( const Tuple& tuple ) ;
00127
00129 virtual ~Tuple() ;
00130
00135 Tuple& operator=( const Tuple& tuple ) ;
00136
00140 TupleObj* operator-> () const { return tuple () ; }
00141
00143 bool valid () const { return 0 != tuple () ; }
00144
00145 protected:
00146
00148 TupleObj* tuple() const { return m_tuple ; }
00149
00150 private:
00151
00153 Tuple();
00154
00155 private:
00156
00158 TupleObj* m_tuple ;
00159
00160 };
00161
00274 template<class ITEM>
00275 class TupleColumn
00276 {
00277 public:
00278 TupleColumn ( const std::string& name ,
00279 const ITEM& value )
00280 : m_name ( name ) , m_value ( value ) {}
00281 public:
00283 const std::string& name () const { return m_name ; }
00285 const ITEM& value () const { return m_value ; }
00286 private:
00287 TupleColumn();
00288 private:
00289 std::string m_name ;
00290 ITEM m_value ;
00291 };
00292
00296 template<class ITEM>
00297 inline TupleColumn<ITEM>
00298 make_column ( const std::string& name , const ITEM& item )
00299 { return TupleColumn<ITEM> ( name , item ) ; }
00300
00304 template<class ITEM>
00305 inline TupleColumn<const ITEM*>
00306 make_column ( const std::string& name , const ITEM* item )
00307 { return TupleColumn<const ITEM*>( name , item ) ; }
00308
00312 template<class ITEM>
00313 inline TupleColumn<ITEM*>
00314 make_column ( const std::string& name , ITEM* item )
00315 { return TupleColumn<ITEM*> ( name , item ) ; }
00316
00317 template<class ITEM>
00318 inline TupleColumn<ITEM>
00319 Column ( const std::string& name , const ITEM& item )
00320 { return make_column ( name , item ) ; }
00321
00322 template<class ITEM>
00323 inline TupleColumn<const ITEM*>
00324 Column ( const std::string& name , const ITEM* item )
00325 { return make_column ( name , item ) ; }
00326
00327 template<class ITEM>
00328 inline TupleColumn<ITEM*>
00329 Column ( const std::string& name , ITEM* item )
00330 { return make_column ( name , item ) ; }
00331
00332 }
00333
00334
00336
00337 template <class ITEM>
00338 inline Tuples::Tuple& operator<<
00339 ( Tuples::Tuple& tuple ,
00340 const Tuples::TupleColumn<ITEM>& item )
00341 {
00342 if ( !tuple.valid() ) { return tuple ; }
00343 tuple->column( item.name() , item.value () ) ;
00344 return tuple ;
00345 }
00346
00347
00348
00349
00350
00351
00352
00353 #endif // GAUDIALG_TUPLE_H
00354