TupleDetail.h
Go to the documentation of this file.
1 #ifndef GAUDIALG_TUPLEDETAIL_H
2 #define GAUDIALG_TUPLEDETAIL_H 1
3 // ============================================================================
4 // Include files
5 // ============================================================================
6 #include "GaudiAlg/Tuples.h"
7 #include "GaudiAlg/Tuple.h"
8 #include "GaudiAlg/TupleObj.h"
9 // ============================================================================
10 
11 // ============================================================================
17 // ============================================================================
18 
19 namespace Tuples
20 {
27  namespace detail
28  {
77  template<class HANDLER1, class HANDLER2>
78  class TupleObjImp: public TupleObj
79  {
80  public:
89  TupleObjImp ( HANDLER1 handler1 ,
90  HANDLER2 handler2 ,
91  const std::string& name ,
93  const CLID& clid = CLID_ColumnWiseTuple ,
95  : TupleObj ( name , tuple , clid, type )
96  , m_handler1 ( handler1 )
97  , m_handler2 ( handler2 )
98  {}
99  public:
100 
102  ( const std::string& msg ,
103  const StatusCode sc = StatusCode::FAILURE ) const override
104  { m_handler1 ( name() + " " + msg , sc ) ; return sc ; }
105 
107  ( const std::string& msg ,
108  const StatusCode sc = StatusCode::FAILURE ) const override
109  { m_handler2 ( name() + " " + msg , sc ) ; return sc ; }
110 
111  protected:
113  ~TupleObjImp() override = default;
114  private:
115  HANDLER1 m_handler1 ;
116  HANDLER2 m_handler2 ;
117  };
118 
147  template<class HANDLER1, class HANDLER2>
148  inline TupleObj* createTupleObj
149  ( HANDLER1 handler1 ,
150  HANDLER2 handler2 ,
151  const std::string& name ,
153  const CLID& clid = CLID_ColumnWiseTuple ,
155  {
157  ( handler1 , handler2 ,
158  name , tuple , clid , type ) ;
159  }
160 
171  template <class OBJECT, class FUNCTION>
173  {
174  public:
176  ErrorHandler( const OBJECT* obj ,
177  FUNCTION fun )
178  : m_obj ( obj ) , m_fun ( fun ) {}
179  public:
182  const StatusCode sc ,
183  const size_t mp = 10 ) const
184  {
185  return (m_obj->*m_fun)( msg , sc , mp ) ;
186  }
187  private:
188  // default constructor is private
189  ErrorHandler();
190  private:
191  const OBJECT* m_obj = nullptr;
192  FUNCTION m_fun ;
193  };
194 
214  template <class OBJECT, class FUNCTION>
216  make_handler ( const OBJECT* object ,
217  FUNCTION function )
218  { return ErrorHandler<OBJECT,FUNCTION>( object , function ); }
219 
220  }
221 
240  template <class OWNER>
241  inline TupleObj* createTupleObj
242  ( const OWNER* owner ,
243  const std::string& name ,
245  const CLID& clid = CLID_ColumnWiseTuple ,
247  {
249  ( detail::make_handler ( owner , &OWNER::Error ) ,
250  detail::make_handler ( owner , &OWNER::Warning ) ,
251  name , tuple , clid , type ) ;
252  }
253 
254 } // end of namespace Tuples
255 
256 
257 
258 // ============================================================================
259 // The END
260 // ============================================================================
261 #endif // GAUDIALG_TUPLEDETAIL_H
262 // ============================================================================
TupleObj * createTupleObj(HANDLER1 handler1, HANDLER2 handler2, const std::string &name, NTuple::Tuple *tuple, const CLID &clid=CLID_ColumnWiseTuple, const Tuples::Type type=Tuples::NTUPLE)
Templated helper functions allow to avoid heavy semantics of dealing with explicit type of class Tupl...
Definition: TupleDetail.h:149
const NTuple::Tuple * tuple() const
provide the access to underlying Gaudi N-tuple
Definition: TupleObj.h:1988
~TupleObjImp() override=default
empty protected destructor
ErrorHandler(const OBJECT *obj, FUNCTION fun)
constructor
Definition: TupleDetail.h:176
Header file for class TupleObj.
The simplest concrete implementation of class TupleObj with 3 arbitrary error handlers Any types (cla...
Definition: TupleDetail.h:78
STL class.
TupleObj.h GaudiAlg/TupleObj.h namespace with few technical implementations.
A simple wrapper class over standard Gaudi NTuple::Tuple facility.
Definition: TupleObj.h:196
TupleObjImp(HANDLER1 handler1, HANDLER2 handler2, const std::string &name, NTuple::Tuple *tuple, const CLID &clid=CLID_ColumnWiseTuple, const Tuples::Type type=Tuples::NTUPLE)
constructor
Definition: TupleDetail.h:89
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
unsigned int CLID
Class ID definition.
Definition: ClassID.h:8
Abstract base class which allows the user to interact with the actual N tuple implementation.
Definition: NTuple.h:370
StatusCode Error(const std::string &msg, const StatusCode sc=StatusCode::FAILURE) const override
Definition: TupleDetail.h:102
virtual Out operator()(const vector_of_const_< In > &inputs) const =0
Tuples::Type type() const
accessor to the N-Tuple type
Definition: TupleObj.h:2015
double fun(const std::vector< double > &x)
Definition: PFuncTest.cpp:26
ErrorHandler< OBJECT, FUNCTION > make_handler(const OBJECT *object, FUNCTION function)
Templated helper functions allow to avoid heavy semantics of dealing with explicit type of class Erro...
Definition: TupleDetail.h:216
StatusCode Warning(const std::string &msg, const StatusCode sc=StatusCode::FAILURE) const override
Definition: TupleDetail.h:107
const CLID & clid() const
accessor to the N-Tuple CLID
Definition: TupleObj.h:2012
A DataObject is the base class of any identifiable object on any data store.
Definition: DataObject.h:30
Type
the list of available types for ntuples
Definition: TupleObj.h:79
const std::string & name() const
get the name
Definition: TupleObj.h:1983
Header file for class : Tuple.
Concrete error handlers for dealing with classes, which supports member functions Error...
Definition: TupleDetail.h:172
General namespace for Tuple properties.
Definition: Maps.h:34