The Gaudi Framework  v30r3 (a5ef0a68)
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/Tuple.h"
7 #include "GaudiAlg/TupleObj.h"
8 #include "GaudiAlg/Tuples.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, HANDLER2 handler2, const std::string& name, NTuple::Tuple* tuple,
90  const CLID& clid = CLID_ColumnWiseTuple, const Tuples::Type type = Tuples::NTUPLE )
91  : TupleObj( name, tuple, clid, type ), m_handler1( handler1 ), m_handler2( handler2 )
92  {
93  }
94 
95  public:
96  StatusCode Error( const std::string& msg, const StatusCode sc = StatusCode::FAILURE ) const override
97  {
98  m_handler1( name() + " " + msg, sc );
99  return sc;
100  }
101 
102  StatusCode Warning( const std::string& msg, const StatusCode sc = StatusCode::FAILURE ) const override
103  {
104  m_handler2( name() + " " + msg, sc );
105  return sc;
106  }
107 
108  private:
109  HANDLER1 m_handler1;
110  HANDLER2 m_handler2;
111  };
112 
141  template <class HANDLER1, class HANDLER2>
142  auto createTupleObj( HANDLER1 handler1, HANDLER2 handler2, const std::string& name, NTuple::Tuple* tuple,
143  const CLID& clid = CLID_ColumnWiseTuple, const Tuples::Type type = Tuples::NTUPLE )
144  {
145  return std::make_unique<TupleObjImp<HANDLER1, HANDLER2>>( handler1, handler2, name, tuple, clid, type );
146  }
147 
158  template <class OBJECT, class FUNCTION>
160  {
161  public:
163  ErrorHandler( const OBJECT* obj, FUNCTION fun ) : m_obj( obj ), m_fun( fun ) {}
164 
165  public:
167  StatusCode operator()( const std::string& msg, const StatusCode sc, const size_t mp = 10 ) const
168  {
169  return ( m_obj->*m_fun )( msg, sc, mp );
170  }
171 
172  private:
173  // default constructor is private
174  ErrorHandler();
175 
176  private:
177  const OBJECT* m_obj = nullptr;
178  FUNCTION m_fun;
179  };
180 
200  template <class OBJECT, class FUNCTION>
201  inline ErrorHandler<OBJECT, FUNCTION> make_handler( const OBJECT* object, FUNCTION function )
202  {
203  return ErrorHandler<OBJECT, FUNCTION>( object, function );
204  }
205  }
206 
225  template <class OWNER>
226  auto createTupleObj( const OWNER* owner, const std::string& name, NTuple::Tuple* tuple,
227  const CLID& clid = CLID_ColumnWiseTuple, const Tuples::Type type = Tuples::NTUPLE )
228  {
229  return detail::createTupleObj( detail::make_handler( owner, &OWNER::Error ),
230  detail::make_handler( owner, &OWNER::Warning ), name, tuple, clid, type );
231  }
232 
233 } // end of namespace Tuples
234 
235 // ============================================================================
236 // The END
237 // ============================================================================
238 #endif // GAUDIALG_TUPLEDETAIL_H
239 // ============================================================================
constexpr static const auto FAILURE
Definition: StatusCode.h:88
const NTuple::Tuple * tuple() const
provide the access to underlying Gaudi N-tuple
Definition: TupleObj.h:1891
ErrorHandler(const OBJECT *obj, FUNCTION fun)
constructor
Definition: TupleDetail.h:163
Header file for class TupleObj.
auto 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:142
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:204
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:51
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:407
StatusCode Error(const std::string &msg, const StatusCode sc=StatusCode::FAILURE) const override
Definition: TupleDetail.h:96
StatusCode operator()(const std::string &msg, const StatusCode sc, const size_t mp=10) const
the only one &#39;useful&#39; method
Definition: TupleDetail.h:167
Tuples::Type type() const
accessor to the N-Tuple type
Definition: TupleObj.h:1902
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:201
double fun(const std::vector< double > &x)
Definition: PFuncTest.cpp:26
StatusCode Warning(const std::string &msg, const StatusCode sc=StatusCode::FAILURE) const override
Definition: TupleDetail.h:102
const CLID & clid() const
accessor to the N-Tuple CLID
Definition: TupleObj.h:1899
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:83
const std::string & name() const
get the name
Definition: TupleObj.h:1886
Header file for class : Tuple.
Concrete error handlers for dealing with classes, which supports member functions Error...
Definition: TupleDetail.h:159
General namespace for Tuple properties.
Definition: Maps.h:34