CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
XMLUtils.h
Go to the documentation of this file.
1 #ifndef GeneratorInterface_LHEInterface_XMLUtils_h
2 #define GeneratorInterface_LHEInterface_XMLUtils_h
3 
4 #include <iostream>
5 #include <string>
6 #include <memory>
7 
8 #include <xercesc/util/XMLString.hpp>
9 #include <xercesc/util/XMLUni.hpp>
10 #include <xercesc/util/XMLChar.hpp>
11 #include <xercesc/util/BinInputStream.hpp>
12 #include <xercesc/framework/XMLPScanToken.hpp>
13 #include <xercesc/sax/InputSource.hpp>
14 #include <xercesc/sax2/DefaultHandler.hpp>
15 #include <xercesc/sax2/SAX2XMLReader.hpp>
16 
17 class Storage;
18 
19 namespace lhef {
20 
21 class StorageWrap {
22  public:
24  ~StorageWrap();
25 
26  Storage *operator -> () { return storage.get(); }
27  const Storage *operator -> () const { return storage.get(); }
28 
29  private:
30  std::auto_ptr<Storage> storage;
31 };
32 
33 class XMLDocument {
34  public:
35  class Handler : public XERCES_CPP_NAMESPACE_QUALIFIER DefaultHandler {};
36 
37  XMLDocument(std::auto_ptr<std::istream> &in, Handler &handler);
38  XMLDocument(std::auto_ptr<StorageWrap> &in, Handler &handler);
39  virtual ~XMLDocument();
40 
41  bool parse();
42 
43  private:
45  public:
48 
49  private:
50  // do not make any kind of copies
51  XercesPlatform(const XercesPlatform &orig);
53 
54  static unsigned int instances;
55  };
56 
57  void init(Handler &handler);
58 
59  std::auto_ptr<XercesPlatform> platform;
60 
61  std::auto_ptr<XERCES_CPP_NAMESPACE_QUALIFIER InputSource> source;
62  std::auto_ptr<XERCES_CPP_NAMESPACE_QUALIFIER SAX2XMLReader> parser;
63 
65 
66  bool done;
67 };
68 
69 class XMLSimpleStr {
70  public:
71  XMLSimpleStr(const XMLCh *str) :
72  string(XERCES_CPP_NAMESPACE_QUALIFIER XMLString::transcode(str))
73  {}
74 
77 
78  inline operator const char *() const
79  { return string; }
80 
81  inline static bool isAllSpaces(const XMLCh *str, unsigned int length)
83  XMLChar1_0::isAllSpaces(str, length); }
84 
85  inline static bool isSpace(XMLCh ch)
87  XMLChar1_0::isWhitespace(ch); }
88 
89  private:
90  char *string;
91 };
92 
93 class XMLUniStr {
94  public:
95  XMLUniStr(const char *str) :
96  unicode(XERCES_CPP_NAMESPACE_QUALIFIER XMLString::transcode(str))
97  {}
98 
101 
102  operator const XMLCh *() const
103  { return unicode; }
104 
105  private:
106  XMLCh *unicode;
107 };
108 
109 template<typename T>
112  public:
113  typedef typename T::Stream_t Stream_t;
114 
115  XMLInputSourceWrapper(std::auto_ptr<Stream_t> &obj) : obj(obj) {}
117 
118  virtual XERCES_CPP_NAMESPACE_QUALIFIER BinInputStream* makeStream() const
119  { return new T(*obj); }
120 
121  private:
122  std::auto_ptr<Stream_t> obj;
123 };
124 
125 class CBInputStream : public XERCES_CPP_NAMESPACE_QUALIFIER BinInputStream {
126  public:
127  class Reader {
128  public:
129  virtual ~Reader();
130  virtual const std::string &data()= 0;
131  };
132 
133  typedef Reader Stream_t;
134 
136  virtual ~CBInputStream();
137 
138  virtual unsigned int curPos() const { return pos; }
139 
140  virtual unsigned int readBytes(XMLByte *const buf,
141  const unsigned int size);
142 
143  private:
145  std::string buffer;
146  unsigned int pos;
147 };
148 
149 class STLInputStream : public XERCES_CPP_NAMESPACE_QUALIFIER BinInputStream {
150  public:
151  typedef std::istream Stream_t;
152 
153  STLInputStream(std::istream &in);
154  virtual ~STLInputStream();
155 
156  virtual unsigned int curPos() const { return pos; }
157 
158  virtual unsigned int readBytes(XMLByte *const buf,
159  const unsigned int size);
160 
161  private:
162  std::istream &in;
163  unsigned int pos;
164 };
165 
167  public XERCES_CPP_NAMESPACE_QUALIFIER BinInputStream {
168  public:
170 
172  virtual ~StorageInputStream();
173 
174  virtual unsigned int curPos() const { return pos; }
175 
176  virtual unsigned int readBytes(XMLByte *const buf,
177  const unsigned int size);
178 
179  private:
181  unsigned int pos;
182 };
183 
187 
188 } // namespace lhef
189 
190 #endif // GeneratorInterface_LHEInterface_XMLUtils_h
std::auto_ptr< Storage > storage
Definition: XMLUtils.h:30
std::auto_ptr< XERCES_CPP_NAMESPACE_QUALIFIER SAX2XMLReader > parser
Definition: XMLUtils.h:62
unsigned int pos
Definition: XMLUtils.h:163
XMLInputSourceWrapper< StorageInputStream > StorageInputSource
Definition: XMLUtils.h:186
XMLInputSourceWrapper< STLInputStream > STLInputSource
Definition: XMLUtils.h:185
XMLInputSourceWrapper(std::auto_ptr< Stream_t > &obj)
Definition: XMLUtils.h:115
std::istream Stream_t
Definition: XMLUtils.h:151
void init(Handler &handler)
Definition: XMLUtils.cc:73
std::auto_ptr< XERCES_CPP_NAMESPACE_QUALIFIER InputSource > source
Definition: XMLUtils.h:61
StorageInputStream(StorageWrap &in)
Definition: XMLUtils.cc:205
std::string buffer
Definition: XMLUtils.h:145
XMLInputSourceWrapper< CBInputStream > CBInputSource
Definition: XMLUtils.h:184
virtual ~XMLDocument()
Definition: XMLUtils.cc:99
std::auto_ptr< XercesPlatform > platform
Definition: XMLUtils.h:59
virtual const std::string & data()=0
CBInputStream(Reader &in)
Definition: XMLUtils.cc:127
virtual unsigned int readBytes(XMLByte *const buf, const unsigned int size)
Definition: XMLUtils.cc:183
static bool isSpace(XMLCh ch)
Definition: XMLUtils.h:85
Definition: Storage.h:8
virtual ~StorageInputStream()
Definition: XMLUtils.cc:210
XMLDocument(std::auto_ptr< std::istream > &in, Handler &handler)
Definition: XMLUtils.cc:55
virtual ~STLInputStream()
Definition: XMLUtils.cc:179
#define XERCES_CPP_NAMESPACE_QUALIFIER
Definition: LHERunInfo.h:16
virtual unsigned int curPos() const
Definition: XMLUtils.h:174
STLInputStream(std::istream &in)
Definition: XMLUtils.cc:170
virtual unsigned int readBytes(XMLByte *const buf, const unsigned int size)
Definition: XMLUtils.cc:214
std::istream & in
Definition: XMLUtils.h:162
XERCES_CPP_NAMESPACE_QUALIFIER XMLPScanToken token
Definition: XMLUtils.h:64
virtual unsigned int curPos() const
Definition: XMLUtils.h:138
XercesPlatform & operator=(const XercesPlatform &orig)
Storage * operator->()
Definition: XMLUtils.h:26
static bool isAllSpaces(const XMLCh *str, unsigned int length)
Definition: XMLUtils.h:81
std::auto_ptr< Stream_t > obj
Definition: XMLUtils.h:122
unsigned int pos
Definition: XMLUtils.h:146
XMLCh * unicode
Definition: XMLUtils.h:106
StorageWrap & in
Definition: XMLUtils.h:180
StorageWrap Stream_t
Definition: XMLUtils.h:169
virtual unsigned int readBytes(XMLByte *const buf, const unsigned int size)
Definition: XMLUtils.cc:136
virtual ~XMLInputSourceWrapper()
Definition: XMLUtils.h:116
XMLSimpleStr(const XMLCh *str)
Definition: XMLUtils.h:71
virtual XERCES_CPP_NAMESPACE_QUALIFIER BinInputStream * makeStream() const
Definition: XMLUtils.h:118
XMLUniStr(const char *str)
Definition: XMLUtils.h:95
StorageWrap(Storage *storage)
Definition: XMLUtils.cc:23
static unsigned int instances
Definition: XMLUtils.h:54
virtual ~CBInputStream()
Definition: XMLUtils.cc:132
long double T
tuple size
Write out results.
Helper class to handle FWLite file input sources.
virtual unsigned int curPos() const
Definition: XMLUtils.h:156