Gyoto
GyotoFactory.h
Go to the documentation of this file.
1 #ifdef GYOTO_USE_XERCES
2 
10 /*
11  Copyright 2011-2014, 2016, 2018 Thibaut Paumard, Frederic Vincent
12 
13  This file is part of Gyoto.
14 
15  Gyoto is free software: you can redistribute it and/or modify
16  it under the terms of the GNU General Public License as published by
17  the Free Software Foundation, either version 3 of the License, or
18  (at your option) any later version.
19 
20  Gyoto is distributed in the hope that it will be useful,
21  but WITHOUT ANY WARRANTY; without even the implied warranty of
22  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
23  GNU General Public License for more details.
24 
25  You should have received a copy of the GNU General Public License
26  along with Gyoto. If not, see <http://www.gnu.org/licenses/>.
27  */
28 
29 #ifndef __GyotoFactory_H_
30 #define __GyotoFactory_H_
31 
32 #include <vector>
33 
34 #include "GyotoConfig.h"
35 
37 
41 #ifndef XERCES_INCLUDE_WCHAR_H
42 #define XERCES_INCLUDE_WCHAR_H 0
43 #endif
44 
45 #include <xercesc/sax/ErrorHandler.hpp>
46 #include <xercesc/dom/DOM.hpp>
47 #include <xercesc/parsers/XercesDOMParser.hpp>
48 #include <GyotoScenery.h>
49 #include <GyotoPhoton.h>
50 #include <GyotoSpectrum.h>
51 #include <sstream>
52 #include <string>
53 
54 namespace Gyoto {
55  class Factory;
56  class FactoryMessenger;
57  namespace Spectrometer {
58  class Generic;
59  class Uniform;
60  }
61 }
62 
115 {
116  friend class Gyoto::FactoryMessenger;
117 
118  protected:
119  // XERCES MACHINERY
121  xercesc::ErrorHandler *reporter_;
123  xercesc::DOMDocument *doc_;
125  xercesc::DOMElement *root_;
127  xercesc::XercesDOMParser *parser_;
129  xercesc::DOMXPathNSResolver* resolver_;
131  xercesc::DOMImplementation* impl_;
132 
133  // Elements which must happen only once in a file
134  // but may happen about anywhere
136  xercesc::DOMElement *gg_el_;
138  xercesc::DOMElement *obj_el_;
140  xercesc::DOMElement *ph_el_;
141 
142  // GYOTO elements
155 
156  // Factory stuff
158  std::string filename_;
160  std::string kind_;
161 
162  public:
164 
171  Factory(char * filename);
172 
187 
189  ~Factory();
190 
191  private:
193  void setReporter(xercesc::ErrorHandler*);
195  xercesc::DOMElement * getRoot();
197  xercesc::DOMDocument* getDoc();
198 
199  public:
201  const std::string kind();
202 
204 
209 
211 
216 
218 
223 
225 
230 
232 
237 
239 
244 
246 
251 
252  // XML OUTPUT
254  void write(const char* const fname=0);
255 
257  std::string format();
258 
259  // Setting elements
261 
266  void metric(SmartPointer<Metric::Generic> gg, xercesc::DOMElement *el);
267 
269 
274  void astrobj(SmartPointer<Astrobj::Generic> ao, xercesc::DOMElement *el);
275 
277 
282  void screen(SmartPointer<Screen> scr, xercesc::DOMElement *el);
283 
285  void setContent(std::string content, xercesc::DOMElement *el);
286 
288 
296  void setParameter(std::string name, xercesc::DOMElement *pel);
297 
299 
308  void setParameter(std::string name, double value,
309  xercesc::DOMElement *pel);
310 
312 
321  void setParameter(std::string name, int value,
322  xercesc::DOMElement *pel);
323 
325 
334  void setParameter(std::string name, unsigned int value,
335  xercesc::DOMElement *pel);
336 
338 
347  void setParameter(std::string name, long value,
348  xercesc::DOMElement *pel);
349 
351 
360  void setParameter(std::string name, unsigned long value,
361  xercesc::DOMElement *pel);
362 
364 
376  void setParameter(std::string name, std::string value,
377  xercesc::DOMElement*pel);
378 
380 
392  void setParameter(std::string name, double val[], size_t nelem,
393  xercesc::DOMElement* pel,
394  FactoryMessenger **child = NULL);
395 
396  void setParameter(std::string name, std::vector<double> const &val,
397  xercesc::DOMElement* pel,
398  FactoryMessenger **child = NULL);
399 
400  void setParameter(std::string name, std::vector<unsigned long> const &val,
401  xercesc::DOMElement* pel,
402  FactoryMessenger **child = NULL);
403 
405 
422  std::string fullPath(std::string relpath);
423 };
424 
425 #endif
426 #endif
Ray-tracing framework.
xercesc::DOMImplementation * impl_
Xerces implementation.
Definition: GyotoFactory.h:131
std::string filename_
XML file name, if actually reading from or writting to file.
Definition: GyotoFactory.h:158
Gyoto::SmartPointer< Gyoto::Screen > screen()
Find Screen element, instantiate it and get it.
std::string format()
Get constructed XML representation as std::string.
SmartPointer< Screen > screen_
The Screen read from or written to Factory::doc_.
Definition: GyotoFactory.h:148
Factory(char *filename)
Constructor for reading a file.
void setParameter(std::string name, xercesc::DOMElement *pel)
Create new XML element without content.
Gyoto::SmartPointer< Gyoto::Scenery > scenery()
Find Scenery element, instantiate it and get it.
SmartPointer< Photon > photon_
The Photon read from or written to Factory::doc_.
Definition: GyotoFactory.h:152
Factory / SmartPointee::Subcontractor_t interface.
Definition: GyotoFactoryMessenger.h:92
xercesc::DOMXPathNSResolver * resolver_
Xerces resolver.
Definition: GyotoFactory.h:129
std::string fullPath(std::string relpath)
Transform relative path into absolute path.
std::string kind_
Kind of root element (Scenery, Metric etc.)
Definition: GyotoFactory.h:160
xercesc::XercesDOMParser * parser_
Xerces parser.
Definition: GyotoFactory.h:127
xercesc::DOMDocument * doc_
The document being read or written.
Definition: GyotoFactory.h:123
void setReporter(xercesc::ErrorHandler *)
Set Xerces reporter.
~Factory()
Destructor.
Gyoto::SmartPointer< Gyoto::Astrobj::Generic > astrobj()
Find Astrobj element, instantiate it and get it.
Compile-time configuration.
xercesc::DOMElement * obj_el_
XML element representing the Astrobj.
Definition: GyotoFactory.h:138
Gyoto::SmartPointer< Gyoto::Metric::Generic > metric()
Find Metric element, instantiate it and get it.
xercesc::DOMElement * ph_el_
XML element representing the Photon.
Definition: GyotoFactory.h:140
Gyoto::SmartPointer< Gyoto::Photon > photon()
Find Photon element, instantiate it and get it.
xercesc::DOMElement * getRoot()
Get Factory::root_.
Spectrum of a simple object (e.g. Star)
Namespace for the Gyoto library.
Definition: GyotoAstrobj.h:43
xercesc::DOMElement * root_
Root element in Factory::doc_.
Definition: GyotoFactory.h:125
SmartPointer< Metric::Generic > gg_
The Metric read from or written to Factory::doc_.
Definition: GyotoFactory.h:146
Gyoto::SmartPointer< Gyoto::Spectrometer::Generic > spectrometer()
Find Spectrometer element, instantiate it and get it.
Gyoto::SmartPointer< Gyoto::Spectrum::Generic > spectrum()
Find Photon element, instantiate it and get it.
Pointers performing reference counting.
Definition: GyotoProperty.h:45
SmartPointer< Astrobj::Generic > obj_
The Astrobj read from or written to Factory::doc_.
Definition: GyotoFactory.h:150
xercesc::ErrorHandler * reporter_
Xerces error handler.
Definition: GyotoFactory.h:121
SmartPointer< Spectrometer::Generic > spectro_
The Spectrometer read from or written to Factory::doc_.
Definition: GyotoFactory.h:154
XML input/output.
Definition: GyotoFactory.h:114
xercesc::DOMDocument * getDoc()
Get Factory::doc_.
SmartPointer< Scenery > scenery_
The Scenery read from or written to Factory::doc_.
Definition: GyotoFactory.h:144
xercesc::DOMElement * gg_el_
XML element representing the Metric.
Definition: GyotoFactory.h:136
void write(const char *const fname=0)
Write constructed XML representation to file.
void setContent(std::string content, xercesc::DOMElement *el)
Set text content of XML element.
A single light ray.
const std::string kind()
Get Factory::kind_.