Gaudi Framework, version v23r2

Home   Generated: Thu Jun 28 2012

Tuple.h

Go to the documentation of this file.
00001 #ifndef GAUDIALG_TUPLE_H
00002 #define GAUDIALG_TUPLE_H 1
00003 // ============================================================================
00004 // Include files
00005 // ============================================================================
00006 // STD & STL
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 } // end of the namespace Tuples
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  ; } // no action for invalid tuple
00343   tuple->column( item.name() , item.value () ) ;
00344   return tuple ;
00345 }
00346 // ============================================================================
00347 
00348 
00349 
00350 // ============================================================================
00351 // THe END
00352 // ============================================================================
00353 #endif // GAUDIALG_TUPLE_H
00354 // ============================================================================
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines

Generated at Thu Jun 28 2012 23:27:15 for Gaudi Framework, version v23r2 by Doxygen version 1.7.2 written by Dimitri van Heesch, © 1997-2004