Gaudi Framework, version v21r8

Home   Generated: 17 Mar 2010

Tuple.h

Go to the documentation of this file.
00001 // $Id: Tuple.h,v 1.9 2008/10/27 19:22:20 marcocle Exp $
00002 #ifndef GAUDIALG_TUPLE_H
00003 #define GAUDIALG_TUPLE_H 1
00004 // ============================================================================
00005 // Include files
00006 // ============================================================================
00007 // STD & STL
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 } // end of the namespace Tuples
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  ; } // no action for invalid tuple
00346   tuple->column( item.name() , item.value () ) ;
00347   return tuple ;
00348 }
00349 // ============================================================================
00350 
00351 
00352 
00353 // ============================================================================
00354 // THe END
00355 // ============================================================================
00356 #endif // GAUDIALG_TUPLE_H
00357 // ============================================================================

Generated at Wed Mar 17 18:06:06 2010 for Gaudi Framework, version v21r8 by Doxygen version 1.5.6 written by Dimitri van Heesch, © 1997-2004