Jpp  15.0.1-rc.1-highqe
the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
Public Types | Public Member Functions | Static Public Member Functions | Private Attributes | List of all members
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. More...
 
const Toperator() (ResultSet &rs)
 Read object with ROOT dictionary from result set. More...
 
const JRootDictionary_tgetDictionary () const
 Get dictionary. More...
 
template<class T >
JRootReaderget (T &object)
 Read object according equation format. More...
 
JRootReaderget (const JRootReadableClass &cls)
 Read ROOT class according equation format. More...
 
template<class T >
JRootReadergetObject (T &object)
 Read object. More...
 
JRootReadergetObject (const JRootReadableClass &cls)
 Read ROOT class. More...
 
JRootReadergetObject (JRootReadableClass &cls)
 Read ROOT class. More...
 

Static Public Member Functions

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

Private Attributes

T object
 internal value More...
 
T value
 default value More...
 
std::vector
< JROOT::JRootReadableClass
buffer
 field count -> data member More...
 

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

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

Definition at line 20 of file JSingleton.hh.

Constructor & Destructor Documentation

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

Default constructor.

Definition at line 101 of file JDBReader.hh.

101  :
103  {}
Simple data structure to support I/O of equations (see class JLANG::JEquation).
T & getInstance(const T &object)
Get static instance from temporary object.
Definition: JObject.hh:75
JRootReader(std::istream &in, const JEquationParameters &parameters, const JRootDictionary_t &dictionary)
Constructor.
static JNullStream null
Null I/O stream.
Definition: JNullStream.hh:51

Member Function Documentation

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().buffer.clear();
112 
113  JDBReader<T>::getInstance().value = T();
114  }
do set_variable OUTPUT_DIRECTORY $WORKDIR T
static data_type & getInstance()
Get unique instance of template class.
Definition: JSingleton.hh:27
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  }
static data_type & getInstance()
Get unique instance of template class.
Definition: JSingleton.hh:27
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 (buffer.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  buffer.push_back(cls.find(parameter.c_str()));
156  }
157  }
158 
159  for (unsigned int i = 0; i != rs.FieldCount(); ++i) {
160 
161  if (buffer[i].is_valid()) {
162 
163  JRedirectString redirect(*this, rs.GetString(i));
164 
165  this->getObject(buffer[i]);
166  }
167  }
168 
169  return object;
170  }
T object
internal value
Definition: JDBReader.hh:173
T value
default value
Definition: JDBReader.hh:174
bool is_valid(const json &js)
Check validity of JSon data.
std::vector< JROOT::JRootReadableClass > buffer
field count -&gt; data member
Definition: JDBReader.hh:176
JRootReader & getObject(T &object)
Read object.
static const std::string SPECIAL_CHARACTERS
Special characters.
Definition: JDBReader.hh:38
const JRootDictionary_t& JROOT::JRootReader::getDictionary ( ) const
inlineinherited

Get dictionary.

Returns
dictionary

Definition at line 86 of file JRootStreamer.hh.

87  {
88  return dictionary;
89  }
const JRootDictionary_t & dictionary
template<class T >
JRootReader& JROOT::JRootReader::get ( T object)
inlineinherited

Read object according equation format.

Parameters
objectobject
Returns
this ROOT reader

Definition at line 99 of file JRootStreamer.hh.

100  {
101  return this->get(JRootReadableClass(object));
102  }
ROOT class for reading object.
Definition: JRootClass.hh:529
JRootReader& JROOT::JRootReader::get ( const JRootReadableClass cls)
inlineinherited

Read ROOT class according equation format.

Parameters
clsROOT class
Returns
this ROOT reader

Definition at line 111 of file JRootStreamer.hh.

112  {
113  using namespace std;
114  using namespace JPP;
115 
116  if (cls.is_valid()) {
117 
118  const JEquationFacet& facet = use_facet<JEquationFacet>(this->getloc());
119 
120  for (JEquation equation; *this >> equation; ) {
121 
122  const JRootReadableClass abc = cls.find(equation.getKey().c_str());
123 
124  bool status = abc.is_valid();
125 
126  if (status) {
127 
128  JRedirectString redirect(*this, equation.getValue());
129 
130  if (facet.isDivision (equation.getSeparator()))
131  this->get(abc);
132  else if (facet.isSeparator(equation.getSeparator()))
133  this->getObject(abc);
134  else
135  status = false;
136 
137  status &= (!this->fail() || this->eof());
138  }
139 
140  if (!status) {
141  THROW(JException, "Error parsing: " << equation);
142  }
143  }
144  }
145 
146  return *this;
147  }
ROOT class for reading object.
Definition: JRootClass.hh:529
JRootAddressableClass find(const char *name) const
Find addressable base class or data member with given name within current class.
Definition: JRootClass.hh:473
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
JRootReader & getObject(T &object)
Read object.
bool fail(std::istream &in)
Check for stream state.
Definition: JParser.hh:96
bool is_valid() const
Check validity of this addressable class.
Definition: JRootClass.hh:462
template<class T >
JRootReader& JROOT::JRootReader::getObject ( T object)
inlineinherited

Read object.

Parameters
objectobject
Returns
this ROOT reader

Definition at line 157 of file JRootStreamer.hh.

158  {
159  return this->getObject(object, JBool<JStreamAvailable<T>::has_istream>());
160  }
Test availability of stream operators.
JRootReader & getObject(T &object)
Read object.
JRootReader& JROOT::JRootReader::getObject ( const JRootReadableClass cls)
inlineinherited

Read ROOT class.

Parameters
clsROOT class
Returns
this ROOT reader

Definition at line 169 of file JRootStreamer.hh.

170  {
171  if (cls.is_valid()) {
172 
173  JRootDictionary_t::const_iterator i = this->getDictionary().find(cls.getTypename());
174 
175  if (i != this->getDictionary().end()) {
176 
177  i->second->getObject(*this, cls.getAddress());
178 
179  } else if (cls.getClass() != NULL) {
180 
181  if (cls.getClass()->GetListOfBases() != NULL) {
182 
183  TIterator* i = cls.getClass()->GetListOfBases()->MakeIterator();
184 
185  for (const TBaseClass* p; (p = (const TBaseClass*) i->Next()) != NULL && (bool) (*this); ) {
186  this->getObject(cls.get(*p));
187  }
188  }
189 
190  if (cls.getClass()->GetListOfDataMembers() != NULL) {
191 
192  TIterator* i = cls.getClass()->GetListOfDataMembers()->MakeIterator();
193 
194  for (const TDataMember* p; (p = (const TDataMember*) i->Next()) != NULL && (bool) (*this); ) {
195  this->getObject(cls.get(*p));
196  }
197  }
198  }
199  }
200 
201  return *this;
202  }
const char * getTypename() const
Get type name.
Definition: JRootClass.hh:195
pointer_type getAddress() const
Get address.
Definition: JRootClass.hh:451
JRootReader & getObject(T &object)
Read object.
JRootAddressableClass get(const TDataMember &data_member) const
Get addressable class of given data member.
Definition: JRootClass.hh:484
bool is_valid() const
Check validity of this addressable class.
Definition: JRootClass.hh:462
TClass * getClass() const
Get class.
Definition: JRootClass.hh:184
const JRootDictionary_t & getDictionary() const
Get dictionary.
JRootReader& JROOT::JRootReader::getObject ( JRootReadableClass cls)
inlineinherited

Read ROOT class.

Parameters
clsROOT class
Returns
this ROOT reader

Definition at line 211 of file JRootStreamer.hh.

212  {
213  return getObject(const_cast<const JRootReadableClass&>(cls));
214  }
JRootReader & getObject(T &object)
Read object.
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

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

internal value

Definition at line 173 of file JDBReader.hh.

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

default value

Definition at line 174 of file JDBReader.hh.

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

field count -> data member

Definition at line 176 of file JDBReader.hh.


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