| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

In This Package:

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 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 
00300   template<class ITEM>
00301   inline TupleColumn<ITEM>
00302   make_column ( const std::string& name , const ITEM& item )
00303   { return TupleColumn<ITEM> ( name , item ) ; }
00304 
00309   template<class ITEM>
00310   inline TupleColumn<const ITEM*>
00311   make_column ( const std::string& name , const ITEM* item )
00312   { return TupleColumn<const ITEM*>( name , item ) ; }
00313 
00318   template<class ITEM>
00319   inline TupleColumn<ITEM*>
00320   make_column ( const std::string& name ,       ITEM* item )
00321   { return TupleColumn<ITEM*>      ( name , item ) ; }
00322 
00323   template<class ITEM>
00324   inline TupleColumn<ITEM>
00325   Column      ( const std::string& name , const ITEM& item )
00326   { return make_column             ( name , item ) ; }
00327 
00328   template<class ITEM>
00329   inline TupleColumn<const ITEM*>
00330   Column      ( const std::string& name , const ITEM* item )
00331   { return make_column             ( name , item ) ; }
00332 
00333   template<class ITEM>
00334   inline TupleColumn<ITEM*>
00335   Column      ( const std::string& name ,       ITEM* item )
00336   { return make_column             ( name , item ) ; }
00337 
00338 } // end of the namespace Tuples
00339 
00340 // ============================================================================
00342 // ============================================================================
00343 template <class ITEM>
00344 inline Tuples::Tuple& operator<<
00345   ( Tuples::Tuple&                   tuple ,
00346     const Tuples::TupleColumn<ITEM>& item )
00347 {
00348   if ( !tuple.valid() ) { return tuple  ; } // no action for invalid tuple
00349   tuple->column( item.name() , item.value () ) ;
00350   return tuple ;
00351 }
00352 // ============================================================================
00353 
00354 
00355 
00356 // ============================================================================
00357 // THe END
00358 // ============================================================================
00359 #endif // GAUDIALG_TUPLE_H
00360 // ============================================================================
| Classes | Job Modules | Data Objects | Services | Algorithms | Tools | Packages | Directories | Tracs |

Generated on Mon Apr 11 19:58:14 2011 for GaudiAlg by doxygen 1.4.7