Tuple.h
Go to the documentation of this file.
1 #ifndef GAUDIALG_TUPLE_H
2 #define GAUDIALG_TUPLE_H 1
3 // ============================================================================
4 // Include files
5 // ============================================================================
6 // STD & STL
7 // ============================================================================
8 #include <string>
9 
10 // ============================================================================
18 // ============================================================================
19 
20 // ============================================================================
28 // ============================================================================
29 
30 #include "GaudiKernel/SmartIF.h"
31 #include "GaudiAlg/TupleObj.h"
32 
33 namespace Tuples
34 {
35 
36  template <class ITEM> class TupleItem ;
37 
116  class GAUDI_API Tuple
117  {
118 
121  // Tuple() = delete;
122  Tuple();
123 
124  public :
129  Tuple ( TupleObj* ) ;
130 
132  Tuple ( const Tuple& ) = default;
133 
135  virtual ~Tuple() = default;
136 
141  Tuple& operator=( const Tuple& ) = default;
142 
146  TupleObj* operator-> () const { return tuple () ; }
147 
149  bool valid () const { return tuple () ; }
150 
151  protected:
152 
154  TupleObj* tuple() const { return m_tuple.get() ; }
155 
156  private:
157 
159  SmartIF<TupleObj> m_tuple;
160 
161  };
162 
275  template<class ITEM>
276  class TupleColumn
277  {
278  public:
279  TupleColumn() = delete;
280  TupleColumn ( std::string name ,
281  ITEM value )
282  : m_name ( std::move(name) ) , m_value ( std::move(value) ) {}
283 
285  const std::string& name () const { return m_name ; }
287  const ITEM& value () const { return m_value ; }
288  private:
289  std::string m_name ;
290  ITEM m_value ;
291  };
292 
296  template<class ITEM>
297  inline TupleColumn<ITEM>
298  make_column ( std::string name , const ITEM& item )
299  { return TupleColumn<ITEM> ( std::move(name) , item ) ; }
300 
304  template<class ITEM>
305  inline TupleColumn<const ITEM*>
306  make_column ( std::string name , const ITEM* item )
307  { return TupleColumn<const ITEM*>( std::move(name) , item ) ; }
308 
312  template<class ITEM>
313  inline TupleColumn<ITEM*>
314  make_column ( std::string name , ITEM* item )
315  { return TupleColumn<ITEM*> ( std::move(name) , item ) ; }
316 
317  template<class ITEM>
318  inline TupleColumn<ITEM>
319  Column ( std::string name , const ITEM& item )
320  { return make_column ( std::move(name) , item ) ; }
321 
322  template<class ITEM>
323  inline TupleColumn<const ITEM*>
324  Column ( std::string name , const ITEM* item )
325  { return make_column ( std::move(name) , item ) ; }
326 
327  template<class ITEM>
328  inline TupleColumn<ITEM*>
329  Column ( std::string name , ITEM* item )
330  { return make_column ( std::move(name) , item ) ; }
331 
332 } // end of the namespace Tuples
333 
334 // ============================================================================
336 // ============================================================================
337 template <class ITEM>
338 inline Tuples::Tuple& operator<<
339  ( Tuples::Tuple& tuple ,
341 {
342  if ( !tuple.valid() ) { return tuple ; } // no action for invalid tuple
343  tuple->column( item.name() , item.value () ) ;
344  return tuple ;
345 }
346 // ============================================================================
347 
348 
349 
350 // ============================================================================
351 // THe END
352 // ============================================================================
353 #endif // GAUDIALG_TUPLE_H
354 // ============================================================================
TupleColumn< ITEM > Column(std::string name, const ITEM &item)
Definition: Tuple.h:319
Small smart pointer class with automatic reference counting for IInterface.
Definition: IConverter.h:14
#define GAUDI_API
Definition: Kernel.h:107
StatusCode column(const std::string &name, float value)
Set the value for selected tuple column.
Definition: TupleObj.cpp:263
STL namespace.
const ITEM & value() const
Return the column value.
Definition: Tuple.h:287
TupleColumn< ITEM > make_column(std::string name, const ITEM &item)
helper function to create 'on-the-fly' the helper object Tuples::TupleColumn
Definition: Tuple.h:298
A simple wrapper class over standard Gaudi NTuple::Tuple facility.
Definition: Tuple.h:116
const std::string & name() const
Return the column name.
Definition: Tuple.h:285
ITEM m_value
The column value.
Definition: Tuple.h:290
Helper class which allows to extend the functionality of Tuple with possibility to use your own repre...
Definition: Tuple.h:276
tuple item
print s1,s2
Definition: ana.py:146
std::string m_name
The column name.
Definition: Tuple.h:289
General namespace for Tuple properties.
Definition: Maps.h:34