DataHandle.h
Go to the documentation of this file.
1 #ifndef GAUDIKERNEL_DATAHANDLE
2 #define GAUDIKERNEL_DATAHANDLE 1
3 
4 #include "GaudiKernel/Parsers.h"
5 #include "GaudiKernel/Property.h"
6 #include "GaudiKernel/PropertyMgr.h"
7 #include "GaudiKernel/ToStream.h"
8 #include "GaudiKernel/DataObjID.h"
9 #include <sstream>
10 
11 class IDataHandleHolder;
12 
13 namespace Gaudi {
14 
15 class DataHandle {
16 public:
17 
18  enum Mode {
19  Reader = 1<<2,
20  Writer = 1<<4,
22  };
23 
24 
25  DataHandle() : m_key("NONE"), m_owner(0), m_mode(Reader) {};
26  DataHandle(const DataObjID& k, Mode a=Reader,
27  IDataHandleHolder* owner=0):
28  m_key(k), m_owner(owner), m_mode(a){};
29 
30  virtual ~DataHandle(){}
31 
32  virtual void setOwner(IDataHandleHolder* o) { m_owner = o; }
33  virtual IDataHandleHolder* owner() const { return m_owner; }
34 
35  virtual Mode mode() const { return m_mode; }
36 
37  virtual void setKey(const DataObjID& key) { m_key = key; }
38  virtual void updateKey(const std::string& key) { m_key.updateKey(key); }
39 
40  virtual const std::string& objKey() const { return m_key.key(); }
41  virtual const DataObjID& fullKey() const { return m_key; }
42 
43  virtual void reset(bool) {};
44  virtual StatusCode commit() { return StatusCode::SUCCESS; }
45 
46  virtual const std::string pythonRepr() const {
47  std::ostringstream ost;
48  ost << "DataHandle(\"" << fullKey() << "|"
49  << std::to_string(mode()) << "\")";
50  return ost.str();
51  }
52 
53 protected:
54  virtual void setMode(const Mode& mode) { m_mode = mode; }
55 
57  IDataHandleHolder* m_owner;
58 
59 private:
60  Mode m_mode;
61 
62 };
63 
64 }
65 
66 namespace Gaudi {
67  namespace Parsers {
68 
69  GAUDI_API
70  StatusCode parse(DataHandle&, const std::string&);
71 
72  } //> ns Parsers
73 
74  namespace Utils {
75 
76  GAUDI_API
77  std::ostream&
78  toStream(const DataHandle& v, std::ostream& o);
79 
80  } //> ns Utils
81 } //> ns Gaudi
82 
83 
84 
85 class GAUDI_API DataHandleProperty : public Property {
86  public:
87 
89  DataHandleProperty( const std::string& name, Gaudi::DataHandle& ref );
90 
93 
95  virtual ~DataHandleProperty();
96 
97  virtual DataHandleProperty* clone() const;
98 
99  virtual bool load( Property& destination ) const;
100 
101  virtual bool assign( const Property& source );
102 
103  virtual std::string toString() const;
104 
105  virtual void toStream(std::ostream& out) const;
106 
107  virtual StatusCode fromString(const std::string& s);
108 
109  const Gaudi::DataHandle& value() const;
110 
111  bool setValue( const Gaudi::DataHandle& value );
112 
113  private:
117  Gaudi::DataHandle* m_pValue;
118 };
119 
120 inline
123 {
124  setValue( value );
125  return *this;
126 }
127 
128 inline
131 {
132  return new DataHandleProperty( *this );
133 }
134 
135 inline
136 bool
137 DataHandleProperty::load( Property& destination ) const
138 {
139  return destination.assign( *this );
140 }
141 
142 inline
143 bool
144 DataHandleProperty::assign( const Property& source )
145 {
146  return fromString( source.toString() ).isSuccess();
147 }
148 
149 inline
150 const Gaudi::DataHandle&
152 {
153  useReadHandler();
154  return *m_pValue;
155 }
156 
157 
158 template<>
159 class SimplePropertyRef< Gaudi::DataHandle > : public DataHandleProperty {
160 public:
161  SimplePropertyRef(const std::string& name, Gaudi::DataHandle& value) :
162  ::DataHandleProperty(name, value)
163  {}
164 
166  virtual ~SimplePropertyRef() {}
167 };
168 
169 
170 
171 #endif
virtual void setKey(const DataObjID &key)
Definition: DataHandle.h:37
virtual void reset(bool)
Definition: DataHandle.h:43
const Gaudi::DataHandle & value() const
Definition: DataHandle.h:151
virtual void useReadHandler() const
use the call-back function at reading
Definition: Property.cpp:78
virtual bool assign(const Property &source)=0
import the property value form the source
virtual void setOwner(IDataHandleHolder *o)
Definition: DataHandle.h:32
virtual std::string toString() const =0
value -> string
#define GAUDI_API
Definition: Kernel.h:107
SimplePropertyRef templated class.
Definition: HistoProperty.h:14
const std::string & name() const
property name
Definition: Property.h:45
virtual DataHandleProperty * clone() const
clone: "virtual constructor"
Definition: DataHandle.h:130
virtual const std::string & objKey() const
Definition: DataHandle.h:40
virtual Mode mode() const
Definition: DataHandle.h:35
bool setValue(const Gaudi::DataHandle &value)
Definition: DataHandle.cpp:63
~SimplePropertyRef() override=default
virtual Destructor
void updateKey(const std::string &key)
Definition: DataObjID.h:112
StatusCode parse(GaudiUtils::HashMap< K, V > &result, const std::string &input)
Basic parser for the types of HashMap used in DODBasicMapper.
virtual bool load(Property &dest) const =0
export the property value to the destination
virtual bool assign(const Property &source)
import the property value form the source
Definition: DataHandle.h:144
virtual ~DataHandle()
Definition: DataHandle.h:30
virtual const DataObjID & fullKey() const
Definition: DataHandle.h:41
IDataHandleHolder * m_owner
Definition: DataHandle.h:57
std::ostream & toStream(ITERATOR first, ITERATOR last, std::ostream &s, const std::string &open, const std::string &close, const std::string &delim)
the helper function to print the sequence
Definition: ToStream.h:338
DataObjID m_key
Definition: DataHandle.h:56
This class is used for returning status codes from appropriate routines.
Definition: StatusCode.h:26
virtual const std::string pythonRepr() const
Definition: DataHandle.h:46
const std::string & key() const
Definition: DataObjID.h:49
DataHandleProperty(const std::string &name, Gaudi::DataHandle &ref)
Constructor with parameters:
Definition: DataHandle.cpp:42
virtual void updateKey(const std::string &key)
Definition: DataHandle.h:38
const TYPE & value() const
explicit conversion
Definition: Property.h:341
virtual bool load(Property &destination) const
export the property value to the destination
Definition: DataHandle.h:137
Property & operator=(const Property &)=default
assignment operator
Property base class allowing Property* collections to be "homogeneous".
Definition: Property.h:38
virtual void setMode(const Mode &mode)
Definition: DataHandle.h:54
string s
Definition: gaudirun.py:246
DataHandleProperty & operator=(const Gaudi::DataHandle &value)
Assignment operator:
Definition: DataHandle.h:122
virtual StatusCode commit()
Definition: DataHandle.h:44
virtual StatusCode fromString(const std::string &s)
string -> value
Definition: DataHandle.cpp:52
Gaudi::DataHandle * m_pValue
Pointer to the real property.
Definition: DataHandle.h:117
virtual Property * clone() const =0
clone: "virtual constructor"
Helper functions to set/get the application return code.
Definition: __init__.py:1
virtual IDataHandleHolder * owner() const
Definition: DataHandle.h:33
virtual void toStream(std::ostream &out) const =0
value -> stream
virtual StatusCode fromString(const std::string &value)=0
string -> value