Jpp 19.3.0-rc.1
the software that should make you happy
Loading...
Searching...
No Matches
JDATABASE::JDBReader< T > Struct Template Reference

Auxiliary class to read object with ROOT dictionary from database. More...

#include <JDBReader.hh>

Inheritance diagram for JDATABASE::JDBReader< T >:
JROOT::JRootReader JLANG::JSingleton< T > JLANG::JStreamState

Public Types

typedef T data_type
 

Public Member Functions

 JDBReader ()
 Default constructor.
 
const T & operator() (ResultSet &rs)
 Read object with ROOT dictionary from result set.
 
const JRootDictionary_t & getDictionary () const
 Get dictionary.
 
template<class T >
JRootReaderget (T &object)
 Read object according equation format.
 
JRootReaderget (const JRootReadableClass &cls)
 Read ROOT class according equation format.
 
template<class T >
JRootReadergetObject (T &object)
 Read object.
 
JRootReadergetObject (const JRootReadableClass &cls)
 Read ROOT class.
 
JRootReadergetObject (JRootReadableClass &cls)
 Read ROOT class.
 

Static Public Member Functions

static void reset ()
 Reset internal lookup table and default value.
 
static void set (const std::vector< Selector > &selection)
 Set default value corresponding to given selection.
 
static data_typegetInstance ()
 Get unique instance of template class.
 

Private Member Functions

template<class T >
JRootReadergetObject (T &object, const JBool< true > &option)
 Read object.
 
template<class T >
JRootReadergetObject (T &object, const JBool< false > &option)
 Read object.
 
template<class JElement_t , class JAllocator_t >
JRootReadergetObject (std::vector< JElement_t, JAllocator_t > &object, const JBool< false > &option)
 Read object.
 

Private Attributes

object
 internal value
 
value
 default value
 
std::vector< JROOT::JRootReadableClasscolumns
 field count -> data member
 
const JRootDictionary_t & dictionary
 
std::ios & __from
 
std::ios & __to
 

Detailed Description

template<class T>
struct JDATABASE::JDBReader< T >

Auxiliary class to read object with ROOT dictionary from database.

The names of the table columns are one-to-one mapped to the names of the data members of the corresponding data structure using the corresponding ROOT dictionary.
For this, all special characters (JDATABASE::SPECIAL_CHARACTERS) are removed from the column names.
The static method JDBReader::set can be used to a priori assign default values to those data members that are defined by the selector used in the query.
Note that the list of column names associated to the template parameter is considered to be permanent.
If not, the static method JDBReader::reset should be called before the next read operation.

Definition at line 94 of file JDBReader.hh.

Member Typedef Documentation

◆ data_type

template<class T >
T JLANG::JSingleton< T >::data_type
inherited

Definition at line 20 of file JSingleton.hh.

Constructor & Destructor Documentation

◆ JDBReader()

template<class T >
JDATABASE::JDBReader< T >::JDBReader ( )
inline

Default constructor.

Definition at line 101 of file JDBReader.hh.

101 :
102 JRootReader(JLANG::null, JLANG::JEquationParameters(), JDBDictionary::getInstance())
103 {}
Simple data structure to support I/O of equations (see class JLANG::JEquation).
JRootReader(std::istream &in, const JEquationParameters &parameters, const JRootDictionary_t &dictionary)
Constructor.
static JNullStream null
Null I/O stream.

Member Function Documentation

◆ reset()

template<class T >
static void JDATABASE::JDBReader< T >::reset ( )
inlinestatic

Reset internal lookup table and default value.

Definition at line 109 of file JDBReader.hh.

110 {
111 JDBReader<T>::getInstance().columns.clear();
112
113 JDBReader<T>::getInstance().value = T();
114 }
static data_type & getInstance()
Get unique instance of template class.
Definition JSingleton.hh:27

◆ set()

template<class T >
static void JDATABASE::JDBReader< T >::set ( const std::vector< Selector > & selection)
inlinestatic

Set default value corresponding to given selection.

Parameters
selectionselection

Definition at line 122 of file JDBReader.hh.

123 {
124 selection >> JDBReader<T>::getInstance().value;
125 }

◆ operator()()

template<class T >
const T & JDATABASE::JDBReader< T >::operator() ( ResultSet & rs)
inline

Read object with ROOT dictionary from result set.

Parameters
rsresult set
Returns
object

Definition at line 134 of file JDBReader.hh.

135 {
136 using namespace std;
137 using namespace JPP;
138
139 object = value;
140
141 if (columns.empty()) {
142
143 JRootReadableClass cls(object);
144
145 for (size_t i = 0; i != rs.FieldCount(); ++i) {
146
147 string parameter = rs.FieldName(i);
148
149 for (string::const_iterator i = SPECIAL_CHARACTERS.begin(); i != SPECIAL_CHARACTERS.end(); ++i) {
150 for (string::size_type pos; (pos = parameter.find(*i)) != string::npos; ) {
151 parameter.erase(pos);
152 }
153 }
154
155 columns.push_back(cls.find(parameter.c_str()));
156 }
157 }
158
159 for (unsigned int i = 0; i != rs.FieldCount(); ++i) {
160
161 if (columns[i].is_valid()) {
162
163 JRedirectString redirect(*this, rs.GetString(i));
164
165 this->getObject(columns[i]);
166 }
167 }
168
169 return object;
170 }
This class can be used to temporarily redirect an input stream to an input string.
JRootReader & getObject(T &object)
Read object.
static const std::string SPECIAL_CHARACTERS
Special characters.
Definition JDBReader.hh:38
This name space includes all other name spaces (except KM3NETDAQ, KM3NET and ANTARES).
bool is_valid(const json &js)
Check validity of JSon data.
T object
internal value
Definition JDBReader.hh:173
T value
default value
Definition JDBReader.hh:174
std::vector< JROOT::JRootReadableClass > columns
field count -> data member
Definition JDBReader.hh:176
ROOT class for reading into object.

◆ getDictionary()

const JRootDictionary_t & JROOT::JRootReader::getDictionary ( ) const
inlineinherited

Get dictionary.

Returns
dictionary

Definition at line 88 of file JRootStreamer.hh.

89 {
90 return dictionary;
91 }
const JRootDictionary_t & dictionary

◆ get() [1/2]

template<class T >
JRootReader & JROOT::JRootReader::get ( T & object)
inlineinherited

Read object according equation format.

Parameters
objectobject
Returns
this ROOT reader

Definition at line 101 of file JRootStreamer.hh.

102 {
103 return this->get(JRootReadableClass(object));
104 }
JRootReader & get(T &object)
Read object according equation format.

◆ get() [2/2]

JRootReader & JROOT::JRootReader::get ( const JRootReadableClass & cls)
inlineinherited

Read ROOT class according equation format.

Parameters
clsROOT class
Returns
this ROOT reader

Definition at line 113 of file JRootStreamer.hh.

114 {
115 using namespace std;
116 using namespace JPP;
117
118 if (cls.is_valid()) {
119
120 const JEquationFacet& facet = use_facet<JEquationFacet>(this->getloc());
121
122 for (JEquation equation; *this >> equation; ) {
123
124 const JRootReadableClass abc = cls.find(equation.getKey().c_str());
125
126 bool status = abc.is_valid();
127
128 if (status) {
129
130 JRedirectString redirect(*this, equation.getValue());
131
132 if (facet.isDivision (equation.getSeparator()))
133 this->get(abc);
134 else if (facet.isSeparator(equation.getSeparator()))
135 this->getObject(abc);
136 else
137 status = false;
138
139 status &= (!this->fail() || this->eof());
140 }
141
142 if (!status) {
143 THROW(JException, "Error parsing: " << equation);
144 }
145 }
146 }
147
148 return *this;
149 }
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Facet class to specify parsing of equations in currect locale (see class JLANG::JEquation).
bool isSeparator(const char c) const
Test for separator character.
bool isDivision(const char c) const
Test for division character.
General purpose equation class.
Definition JEquation.hh:47
General exception.
Definition JException.hh:24
bool fail(std::istream &in)
Check for stream state.
Definition JParser.hh:98
bool is_valid() const
Check validity of this addressable class.
JRootAddressableClass find(const char *const name) const
Find addressable base class or data member with given name within current class.

◆ getObject() [1/6]

template<class T >
JRootReader & JROOT::JRootReader::getObject ( T & object)
inlineinherited

Read object.

Parameters
objectobject
Returns
this ROOT reader

Definition at line 159 of file JRootStreamer.hh.

160 {
161 return this->getObject(object, JBool<JStreamAvailable<T>::has_istream>());
162 }
Test availability of stream operators.

◆ getObject() [2/6]

JRootReader & JROOT::JRootReader::getObject ( const JRootReadableClass & cls)
inlineinherited

Read ROOT class.

Parameters
clsROOT class
Returns
this ROOT reader

Definition at line 171 of file JRootStreamer.hh.

172 {
173 if (cls.is_valid()) {
174
175 JRootDictionary_t::const_iterator i = this->getDictionary().find(cls.getTypename());
176
177 if (i != this->getDictionary().end()) {
178
179 i->second->getObject(*this, cls.getAddress());
180
181 } else if (cls.getClass() != NULL) {
182
183 if (cls.getClass()->GetListOfBases() != NULL) {
184
185 std::unique_ptr<TIterator> i(cls.getClass()->GetListOfBases()->MakeIterator());
186
187 for (const TBaseClass* p; (p = (const TBaseClass*) i->Next()) != NULL && (bool) (*this); ) {
188 this->getObject(cls.get(*p));
189 }
190 }
191
192 if (cls.getClass()->GetListOfDataMembers() != NULL) {
193
194 std::unique_ptr<TIterator> i(cls.getClass()->GetListOfDataMembers()->MakeIterator());
195
196 for (const TDataMember* p; (p = (const TDataMember*) i->Next()) != NULL && (bool) (*this); ) {
197 this->getObject(cls.get(*p));
198 }
199 }
200 }
201 }
202
203 return *this;
204 }
const JRootDictionary_t & getDictionary() const
Get dictionary.

◆ getObject() [3/6]

JRootReader & JROOT::JRootReader::getObject ( JRootReadableClass & cls)
inlineinherited

Read ROOT class.

Parameters
clsROOT class
Returns
this ROOT reader

Definition at line 213 of file JRootStreamer.hh.

214 {
215 return getObject(const_cast<const JRootReadableClass&>(cls));
216 }

◆ getObject() [4/6]

template<class T >
JRootReader & JROOT::JRootReader::getObject ( T & object,
const JBool< true > & option )
inlineprivateinherited

Read object.

Parameters
objectobject
optiontrue
Returns
this ROOT reader

Definition at line 227 of file JRootStreamer.hh.

228 {
229 *this >> object;
230
231 return *this;
232 }

◆ getObject() [5/6]

template<class T >
JRootReader & JROOT::JRootReader::getObject ( T & object,
const JBool< false > & option )
inlineprivateinherited

Read object.

Parameters
objectobject
optionfalse
Returns
this ROOT reader

Definition at line 243 of file JRootStreamer.hh.

244 {
245 return this->getObject(JRootReadableClass(object));
246 }

◆ getObject() [6/6]

template<class JElement_t , class JAllocator_t >
JRootReader & JROOT::JRootReader::getObject ( std::vector< JElement_t, JAllocator_t > & object,
const JBool< false > & option )
inlineprivateinherited

Read object.

Parameters
objectobject
optionfalse
Returns
this ROOT reader

Definition at line 257 of file JRootStreamer.hh.

258 {
259 int n = 0;
260
261 this->getObject(n);
262
263 for (JElement_t element; n != 0 && this->getObject(element); --n) {
264 object.push_back(element);
265 }
266
267 return *this;
268 }
const int n
Definition JPolint.hh:791

◆ getInstance()

template<class T >
static data_type & JLANG::JSingleton< T >::getInstance ( )
inlinestaticinherited

Get unique instance of template class.

Returns
object

Definition at line 27 of file JSingleton.hh.

28 {
29 static data_type value;
30
31 return value;
32 }

Member Data Documentation

◆ object

template<class T >
T JDATABASE::JDBReader< T >::object
private

internal value

Definition at line 173 of file JDBReader.hh.

◆ value

template<class T >
T JDATABASE::JDBReader< T >::value
private

default value

Definition at line 174 of file JDBReader.hh.

◆ columns

template<class T >
std::vector<JROOT::JRootReadableClass> JDATABASE::JDBReader< T >::columns
private

field count -> data member

Definition at line 176 of file JDBReader.hh.

◆ dictionary

const JRootDictionary_t& JROOT::JRootReader::dictionary
privateinherited

Definition at line 271 of file JRootStreamer.hh.

◆ __from

std::ios& JLANG::JStreamState::__from
privateinherited

Definition at line 67 of file JStreamState.hh.

◆ __to

std::ios& JLANG::JStreamState::__to
privateinherited

Definition at line 68 of file JStreamState.hh.


The documentation for this struct was generated from the following file: