Jpp - the software that should make you happy
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
JRootPrinter.hh
Go to the documentation of this file.
1 #ifndef __JROOT__JROOTPRINTER__
2 #define __JROOT__JROOTPRINTER__
3 
4 #include <string>
5 #include <ostream>
6 
8 #include "JLang/JException.hh"
9 #include "JROOT/JRootClass.hh"
10 #include "JROOT/JRootStreamer.hh"
11 #include "JROOT/JRootDictionary.hh"
12 
13 /**
14  * \file
15  *
16  * Print objects in ASCII format using ROOT dictionary.
17  * \author mdejong
18  */
19 namespace JROOT {}
20 namespace JPP { using namespace JROOT; }
21 
22 namespace JROOT {
23 
25  using JLANG::JParseError;
26 
27  /**
28  * Auxiliary class for printing objects in ASCII format using JRootWriter.
29  */
30  struct JRootPrinter {
31  /**
32  * Get equation parameters.
33  *
34  * \return equation parameters
35  */
37  {
38  static JEquationParameters equation("=", "\n", ".", "");
39 
40  return equation;
41  }
42 
43 
44  /**
45  * Set equation parameters.
46  *
47  * \param equation equation parameters
48  */
49  static inline void setEquationParameters(const JEquationParameters& equation)
50  {
51  getEquationParameters() = equation;
52  }
53 
54 
55  /**
56  * Write class contents to output.
57  *
58  * \param writer ROOT writer
59  * \param cls ROOT class
60  */
61  static inline void print(JRootWriter& writer, const JRootWritableClass& cls)
62  {
63  if (cls.is_valid()) {
64  if (writer.getDictionary().find(cls.getTypename()) != writer.getDictionary().end())
65  writer.putObject(cls);
66  else
67  writer.put(cls);
68  }
69  }
70 
71 
72  /**
73  * Write part of object to output using ROOT dictionary.
74  *
75  * \param out output stream
76  * \param object object
77  * \param key data member name, optionally separated by division character
78  * \param parameters equation parameters
79  * \param dictionary dictionary
80  */
81  template<class T>
82  static inline void print(std::ostream& out,
83  const T& object,
84  const std::string& key,
86  const JRootDictionary_t& dictionary = JRootDictionary::getInstance())
87  {
88  using namespace std;
89  using namespace JPP;
90 
91  JRootWritableClass cls(object);
92 
93  for (string::size_type il = 0, ir = 0; ir != string::npos && cls.is_valid(); il = ir + 1) {
94  ir = key.substr(il).find(parameters.getDefaultDivision());
95  cls = cls.find(key.substr(il, ir - il).c_str());
96  }
97 
98  if (cls.is_valid()) {
99 
100  JRootWriter writer(out, parameters, dictionary);
101 
102  print(writer, cls);
103 
104  } else {
105 
106  THROW(JParseError, "Invalid key " << key);
107  }
108  }
109 
110 
111  /**
112  * Write object to output using ROOT dictionary.
113  *
114  * \param out output stream
115  * \param object object
116  * \param parameters equation parameters
117  * \param dictionary dictionary
118  */
119  template<class T>
120  static inline void print(std::ostream& out,
121  const T& object,
122  const JEquationParameters& parameters,
123  const JRootDictionary_t& dictionary = JRootDictionary::getInstance())
124  {
125  JRootWriter writer(out, parameters, dictionary);
126  JRootWritableClass cls(object);
127 
128  print(writer, cls);
129  }
130 
131 
132  /**
133  * Write part of object to output using ROOT dictionary.
134  *
135  * \param out output stream
136  * \param object object
137  * \param key data member name, optionally separated by division character '.'
138  * \param dictionary dictionary
139  */
140  template<class T>
141  static inline void print(std::ostream& out,
142  const T& object,
143  const std::string& key,
144  const JRootDictionary_t& dictionary = JRootDictionary::getInstance())
145  {
146  print(out, object, key, JRootPrinter::getEquationParameters(), dictionary);
147  }
148 
149 
150  /**
151  * Write object to output using ROOT dictionary.
152  *
153  * \param out output stream
154  * \param object object
155  * \param dictionary dictionary
156  */
157  template<class T>
158  static inline void print(std::ostream& out,
159  const T& object,
160  const JRootDictionary_t& dictionary = JRootDictionary::getInstance())
161  {
162  print(out, object, JRootPrinter::getEquationParameters(), dictionary);
163  }
164  };
165 }
166 
167 #endif
static JEquationParameters & getEquationParameters()
Get equation parameters.
Definition: JRootPrinter.hh:36
const JRootDictionary_t & getDictionary() const
Get dictictionary.
Exceptions.
JRootAddressableClass find(const char *name) const
Find addressable base class or data member with given name within current class.
Definition: JRootClass.hh:472
Implementation for ASCII output of objects with ROOT dictionary.
const char * getTypename() const
Get type name.
Definition: JRootClass.hh:194
#define THROW(JException_t, A)
Marco for throwing exception with std::ostream compatible message.
Definition: JException.hh:670
static void setEquationParameters(const JEquationParameters &equation)
Set equation parameters.
Definition: JRootPrinter.hh:49
*fatal Wrong number of arguments esac JCookie sh typeset Z DETECTOR typeset Z SOURCE_RUN typeset Z TARGET_RUN set_variable PARAMETERS_FILE $WORKDIR parameters
Definition: diff-Tuna.sh:38
Simple data structure to support I/O of equations (see class JLANG::JEquation).
JRootWriter & putObject(const T &object)
Write object.
ASCII I/O of objects with ROOT dictionary.
static void print(std::ostream &out, const T &object, const JRootDictionary_t &dictionary=JRootDictionary::getInstance())
Write object to output using ROOT dictionary.
do set_variable OUTPUT_DIRECTORY $WORKDIR T
static void print(JRootWriter &writer, const JRootWritableClass &cls)
Write class contents to output.
Definition: JRootPrinter.hh:61
const char getDefaultDivision() const
Get default division character.
static void print(std::ostream &out, const T &object, const std::string &key, const JRootDictionary_t &dictionary=JRootDictionary::getInstance())
Write part of object to output using ROOT dictionary.
Type definition of ROOT based dictionary for ASCII I/O.
static void print(std::ostream &out, const T &object, const JEquationParameters &parameters, const JRootDictionary_t &dictionary=JRootDictionary::getInstance())
Write object to output using ROOT dictionary.
bool is_valid() const
Check validity of this addressable class.
Definition: JRootClass.hh:461
static data_type & getInstance()
Get unique instance of template class.
Definition: JSingleton.hh:27
Exception for parsing value.
Definition: JException.hh:180
static void print(std::ostream &out, const T &object, const std::string &key, const JEquationParameters &parameters, const JRootDictionary_t &dictionary=JRootDictionary::getInstance())
Write part of object to output using ROOT dictionary.
Definition: JRootPrinter.hh:82
JRootWriter & put(const T &object)
Write object according equation format.
Auxiliary class for printing objects in ASCII format using JRootWriter.
Definition: JRootPrinter.hh:30
ROOT class for writing object.
Definition: JRootClass.hh:588