The Gaudi Framework  v29r0 (ff2e7097)
Node.h
Go to the documentation of this file.
1 #ifndef JOBOPTIONSVC_NODE_H_
2 #define JOBOPTIONSVC_NODE_H_
3 // ============================================================================
4 // Includes:
5 // ============================================================================
6 // STD & STL:
7 // ============================================================================
8 #include <iostream>
9 #include <string>
10 #include <vector>
11 // ============================================================================
12 // BOOST:
13 // ============================================================================
14 
15 #include <boost/fusion/include/adapt_struct.hpp>
16 #include <boost/fusion/include/unused.hpp>
17 #include <boost/range/iterator_range.hpp>
18 // ============================================================================
19 #include "Iterator.h"
20 #include "Position.h"
21 // ============================================================================
22 namespace Gaudi
23 {
24  namespace Parsers
25  {
26  // ============================================================================
27  class Node final
28  {
29  public:
30  enum NodeType {
62  };
67 
68  Node() = default;
69  std::string name() const;
70  std::string ToString( int indent = 0 ) const;
71  };
72  // ============================================================================
73  class NodeOperations final
74  {
75  public:
76  struct value {
77  };
78  template <typename A, typename B = boost::fusion::unused_type, typename C = boost::fusion::unused_type,
79  typename D = boost::fusion::unused_type>
80  struct result {
81  typedef void type;
82  };
83  //---------------------------------------------------------------------------
84  void operator()( Node& node, Node::NodeType type ) const { node.type = type; }
85 
86  void operator()( Node& node, Node child ) const { node.children.push_back( std::move( child ) ); }
87 
88  void operator()( Node& node, std::string val ) const { node.value = std::move( val ); }
89 
90  void operator()( Node& node, boost::iterator_range<Iterator> range ) const
91  {
92  node.value = boost::copy_range<std::string>( range );
93  }
94 
95  void operator()( Node& node, bool val ) const { node.value = val ? "1" : "0"; }
96 
97  void operator()( Node& node, const Iterator& iter ) const
98  {
99  const IteratorPosition& pos = iter.get_position();
100  node.position = Position( pos.file, pos.line, pos.column );
101  }
102 
103  //---------------------------------------------------------------------------
104  };
105  // ============================================================================
106  } /* Gaudi */
107 } /* Parsers */
108 // ============================================================================
109 BOOST_FUSION_ADAPT_STRUCT( Gaudi::Parsers::Node,
112 // ============================================================================
113 #endif // JOBOPTIONSVC_NODE_H_
void operator()(Node &node, Node::NodeType type) const
Definition: Node.h:84
void operator()(Node &node, Node child) const
Definition: Node.h:86
void operator()(Node &node, bool val) const
Definition: Node.h:95
std::string name() const
Definition: Node.cpp:48
STL class.
NamedRange_< CONTAINER > range(const CONTAINER &cnt, std::string name)
simple function to create the named range from arbitrary container
Definition: NamedRange.h:121
T move(T...args)
std::string ToString(int indent=0) const
Definition: Node.cpp:55
STL class.
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
Definition: Iterator.h:18
void operator()(Node &node, const Iterator &iter) const
Definition: Node.h:97
std::string value
Definition: Node.h:64
boost::spirit::classic::file_position_base< std::string > IteratorPosition
Definition: Iterator.h:19
Position position
Definition: Node.h:66
Helper functions to set/get the application return code.
Definition: __init__.py:1
void operator()(Node &node, std::string val) const
Definition: Node.h:88
NodeType type
Definition: Node.h:63
std::vector< Node > children
Definition: Node.h:65
void operator()(Node &node, boost::iterator_range< Iterator > range) const
Definition: Node.h:90