ATLAS Offline Software
Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
XMLCoreParser Class Reference

#include <XMLCoreParser.h>

Inheritance diagram for XMLCoreParser:
Collaboration diagram for XMLCoreParser:

Public Member Functions

XMLCoreNode parse (const std::string &file_name)
 
void visit (const std::string &file_name)
 
void register_default_factory (std::unique_ptr< XMLCoreFactory > factory)
 
void register_factory (const std::string &name, std::unique_ptr< XMLCoreFactory > factory)
 
void register_external_entity (const std::string &name, const std::string &file_name)
 
void register_text_entity (const std::string &name, const std::string &text)
 
void up ()
 
void down ()
 
int level () const
 

Private Types

typedef std::map< std::string, std::unique_ptr< XMLCoreFactory > > FactoryMap
 

Private Member Functions

void visit (const XMLCoreNode &node)
 
void terminate ()
 
XMLCoreFactoryfind_factory (const std::string &name)
 

Private Attributes

FactoryMap m_factories
 
std::unique_ptr< XMLCoreFactorym_default_factory
 
int m_level = 0
 

Detailed Description

Definition at line 97 of file XMLCoreParser.h.

Member Typedef Documentation

◆ FactoryMap

typedef std::map<std::string, std::unique_ptr<XMLCoreFactory> > XMLCoreParser::FactoryMap
private

Definition at line 120 of file XMLCoreParser.h.

Member Function Documentation

◆ down()

void XMLCoreParser::down ( )

Definition at line 417 of file XMLCoreParser.cxx.

417  {
418  m_level -= 1;
419 }

◆ find_factory()

XMLCoreFactory * XMLCoreParser::find_factory ( const std::string &  name)
private

Definition at line 401 of file XMLCoreParser.cxx.

401  {
403  if (it != m_factories.end ()) {
404  return (*it).second.get();
405  }
406  return m_default_factory.get();
407 }

◆ level()

int XMLCoreParser::level ( ) const

Definition at line 423 of file XMLCoreParser.cxx.

423  {
424  return m_level;
425 }

◆ parse()

XMLCoreNode XMLCoreParser::parse ( const std::string &  file_name)

Definition at line 272 of file XMLCoreParser.cxx.

272  {
273  m_level = 0;
274  std::unique_ptr<CoreParser::DOMNode> doc = ExpatCoreParser::parse (file_name);
276  if (doc != nullptr) doc->print ("============ ALL =============");
277  }
278  if (not doc){
279  throw std::runtime_error("XMLCoreParser: no such file ["+file_name+"]");
280  }
281  return XMLCoreNode (std::move (doc));
282 }

◆ register_default_factory()

void XMLCoreParser::register_default_factory ( std::unique_ptr< XMLCoreFactory factory)

Definition at line 367 of file XMLCoreParser.cxx.

367  {
368  m_default_factory = std::move (factory);
369 }

◆ register_external_entity()

void XMLCoreParser::register_external_entity ( const std::string &  name,
const std::string &  file_name 
)

Definition at line 382 of file XMLCoreParser.cxx.

382  {
384  std::cout << "XMLCoreParser::register_external_entity> name=" << name
385  << " file_name=" << file_name << std::endl;
386  }
388 }

◆ register_factory()

void XMLCoreParser::register_factory ( const std::string &  name,
std::unique_ptr< XMLCoreFactory factory 
)

Definition at line 372 of file XMLCoreParser.cxx.

373  {
375  std::cout << "XMLCoreFactory::register_factory> name=" << name
376  << " factory=" << factory.get() << std::endl;
377  }
378  m_factories[name] = std::move (factory);
379 }

◆ register_text_entity()

void XMLCoreParser::register_text_entity ( const std::string &  name,
const std::string &  text 
)

Definition at line 391 of file XMLCoreParser.cxx.

391  {
393  std::cout << "XMLCoreParser::register_text_entity> name=" << name
394  << std::endl;
395  }
397 }

◆ terminate()

void XMLCoreParser::terminate ( )
private

◆ up()

void XMLCoreParser::up ( )

Definition at line 411 of file XMLCoreParser.cxx.

411  {
412  m_level += 1;
413 }

◆ visit() [1/2]

void XMLCoreParser::visit ( const std::string &  file_name)

Definition at line 285 of file XMLCoreParser.cxx.

285  {
287  std::cout << "XMLCoreParser::visit file_name "
288  << file_name << std::endl;
289  }
292  const CoreParser::DOMNode& node = n.get_node();
293  const CoreParser::DOMNode* nptr = &node;
294  std::cout << "XMLCoreParser::visit node=" << nptr << std::endl;
295  }
296  visit (n);
297 }

◆ visit() [2/2]

void XMLCoreParser::visit ( const XMLCoreNode node)
private

Definition at line 300 of file XMLCoreParser.cxx.

300  {
301  // Get the name and value out for convenience
302  const CoreParser::DOMNode& node = core_node.get_node ();
303  const CoreParser::DOMNode* nptr = &node;
304  const std::string& nodeName = node.get_name();
305  const std::string& nodeValue = node.get_value();
307  std::cout << "XMLCoreParser::visit node(" << nptr << ") " << nodeName << std::endl;
308  }
309  XMLCoreFactory* factory = find_factory (nodeName);
311  std::cout << "XMLCoreParser::visit factory " << factory << std::endl;
312  }
313 
314  switch (node.get_type()) {
316  const CoreParser::DOMSiblings& siblings = node.get_siblings ();
317  for (const CoreParser::DOMNode* child : siblings) {
318  XMLCoreNode n (child);
319  visit (n);
320  }
321  break;
322  }
325  std::cout << "XMLCoreParser::visit ELEMENT_NODE "
326  << " factory=" << factory
327  << std::endl;
328  }
329  if (factory != 0){
330  factory->start (*this, core_node);
331  } else {
332  std::cerr << "XMLCoreParser> Cannot find factory for element "
333  << nodeName << std::endl;
334  register_factory (nodeName, std::make_unique<DummyFactory>());
335  }
336  const CoreParser::DOMSiblings& siblings = node.get_siblings ();
337  for (const CoreParser::DOMNode* child : siblings) {
338  XMLCoreNode n (child);
339  visit (n);
340  }
341  if (factory != 0) factory->end (*this, core_node);
342  break;
343  }
345  if (factory != 0) factory->comment (*this, nodeValue);
346  break;
347  }
349  std::cout << "ENTITY_NODE " << nodeValue << std::endl;
350  break;
351  }
353  std::cout << "ENTITY_REFERENCE_NODE " << nodeValue << std::endl;
354  break;
355  }
356  default: {
357  std::cerr << "Unrecognized node type = " << (long) node.get_type() << std::endl;
358  break;
359  }
360  }
362  std::cout << "XMLCoreParser::visit-2" << std::endl;
363  }
364 }

Member Data Documentation

◆ m_default_factory

std::unique_ptr<XMLCoreFactory> XMLCoreParser::m_default_factory
private

Definition at line 122 of file XMLCoreParser.h.

◆ m_factories

FactoryMap XMLCoreParser::m_factories
private

Definition at line 121 of file XMLCoreParser.h.

◆ m_level

int XMLCoreParser::m_level = 0
private

Definition at line 123 of file XMLCoreParser.h.


The documentation for this class was generated from the following files:
XMLCoreParser::find_factory
XMLCoreFactory * find_factory(const std::string &name)
Definition: XMLCoreParser.cxx:401
xAOD::iterator
JetConstituentVector::iterator iterator
Definition: JetConstituentVector.cxx:68
XMLCoreParser::parse
XMLCoreNode parse(const std::string &file_name)
Definition: XMLCoreParser.cxx:272
CoreParser::DOMSiblings
std::vector< DOMNode * > DOMSiblings
Definition: DOMNode.h:17
XMLCoreFactory::start
void start(XMLCoreParser &parser, const XMLCoreNode &node)
Definition: XMLCoreParser.cxx:66
skel.it
it
Definition: skel.GENtoEVGEN.py:407
CoreParser::DOMNode
Definition: DOMNode.h:20
CoreParser::DOMNode::ENTITY_NODE
@ ENTITY_NODE
Definition: DOMNode.h:27
XMLCoreNode
Definition: XMLCoreParser.h:19
XMLCoreParser::m_level
int m_level
Definition: XMLCoreParser.h:123
CoreParser::DOMNode::DOCUMENT_NODE
@ DOCUMENT_NODE
Definition: DOMNode.h:24
physics_parameters.file_name
string file_name
Definition: physics_parameters.py:32
XMLCoreParser::m_default_factory
std::unique_ptr< XMLCoreFactory > m_default_factory
Definition: XMLCoreParser.h:122
CoreParser::DOMNode::COMMENT_NODE
@ COMMENT_NODE
Definition: DOMNode.h:26
ExpatCoreParser::register_text_entity
static void register_text_entity(const std::string &name, const std::string &text)
Definition: ExpatCoreParser.cxx:92
beamspotman.n
n
Definition: beamspotman.py:729
CoreParser::DOMNode::ELEMENT_NODE
@ ELEMENT_NODE
Definition: DOMNode.h:25
XMLCoreParser::register_factory
void register_factory(const std::string &name, std::unique_ptr< XMLCoreFactory > factory)
Definition: XMLCoreParser.cxx:372
XMLCoreFactory::end
void end(XMLCoreParser &parser, const XMLCoreNode &node)
Definition: XMLCoreParser.cxx:74
XMLCoreFactory
Definition: XMLCoreParser.h:62
PyPoolBrowser.node
node
Definition: PyPoolBrowser.py:131
merge_scale_histograms.doc
string doc
Definition: merge_scale_histograms.py:9
name
std::string name
Definition: Control/AthContainers/Root/debug.cxx:240
debug
const bool debug
Definition: MakeUncertaintyPlots.cxx:53
CoreParser::DOMNode::ENTITY_REFERENCE_NODE
@ ENTITY_REFERENCE_NODE
Definition: DOMNode.h:28
XMLCoreParser::m_factories
FactoryMap m_factories
Definition: XMLCoreParser.h:121
ExpatCoreParser::parse
static std::unique_ptr< CoreParser::DOMNode > parse(const std::string &file_name)
Definition: ExpatCoreParser.cxx:407
makeTransCanvas.text
text
Definition: makeTransCanvas.py:11
ExpatCoreParser::register_external_entity
static void register_external_entity(const std::string &name, const std::string &file_name)
Definition: ExpatCoreParser.cxx:82
XMLCoreFactory::comment
void comment(XMLCoreParser &parser, const std::string &comment)
Definition: XMLCoreParser.cxx:82
XMLCoreParser::visit
void visit(const std::string &file_name)
Definition: XMLCoreParser.cxx:285
node
Definition: node.h:21