The Gaudi Framework  v36r1 (3e2fb5a8)
Grammars.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2019 CERN for the benefit of the LHCb and ATLAS collaborations *
3 * *
4 * This software is distributed under the terms of the Apache version 2 licence, *
5 * copied verbatim in the file "LICENSE". *
6 * *
7 * In applying this licence, CERN does not waive the privileges and immunities *
8 * granted to it by virtue of its status as an Intergovernmental Organization *
9 * or submit itself to any jurisdiction. *
10 \***********************************************************************************/
11 #pragma once
12 
13 #ifdef __GNUC__
14 # pragma GCC system_header
15 #endif
16 // ============================================================================
17 // Include files
18 // ============================================================================
19 // STD:
20 //==============================================================================
21 #include <list>
22 #include <map>
23 #include <set>
24 #include <string>
25 #include <tuple>
26 #include <type_traits>
27 #include <unordered_map>
28 #include <unordered_set>
29 #include <vector>
30 //==============================================================================
31 // Boost:
32 //==============================================================================
33 #include <boost/fusion/include/std_pair.hpp>
34 #include <boost/fusion/include/unused.hpp>
35 #include <boost/spirit/include/qi.hpp>
36 
37 #include <boost/spirit/include/phoenix_core.hpp>
38 #include <boost/spirit/include/phoenix_operator.hpp>
39 
40 #include <boost/spirit/repository/include/qi_confix.hpp>
41 //==============================================================================
42 // Gaudi:
43 //==============================================================================
44 #include "GaudiKernel/HashMap.h"
45 #include "GaudiKernel/HistoDef.h"
48 #include "GaudiKernel/StringKey.h"
49 #include "GaudiKernel/VectorMap.h"
50 //==============================================================================
51 namespace Gaudi {
52  namespace Parsers {
53  //==============================================================================
54  // Namespace aliases:
55  //==============================================================================
56  namespace sp = boost::spirit;
57  namespace ph = boost::phoenix;
58  namespace qi = sp::qi;
59  namespace enc = sp::ascii;
60  namespace rep = sp::repository;
61  //==============================================================================
62  // Grammars
63  //==============================================================================
64  typedef std::string::const_iterator DefaultIterator;
65  typedef enc::space_type DefaultSkipper;
66  //==============================================================================
67  template <typename Iterator, typename T, typename Skipper, class Enable = void>
68  struct Grammar_ {
69  /* READ THIS IF YOUR COMPILE BREAKS ON THE FOLLOWING LINE
70  *
71  * To users: You have to ask developers to implement parser for your type T
72  * To developer: You have to implement and register Grammar for type T
73  *
74  */
75  BOOST_MPL_ASSERT_MSG( false, GRAMMAR_FOR_TYPE_DOES_NOT_EXISTS, ( T ) );
76  };
77 
78 #define REGISTER_GRAMMAR( ResultType, GrammarName ) \
79  template <typename Iterator, typename Skipper> \
80  struct Grammar_<Iterator, ResultType, Skipper> { \
81  typedef GrammarName<Iterator, Skipper> Grammar; \
82  }
83  //==============================================================================
84  template <typename Iterator>
85  struct SkipperGrammar : qi::grammar<Iterator> {
87  comments = enc::space | rep::confix( "/*", "*/" )[*( qi::char_ - "*/" )] |
88  rep::confix( "//", ( sp::eol | sp::eoi ) )[*( qi::char_ - ( sp::eol | sp::eoi ) )];
89  }
90  qi::rule<Iterator> comments;
91  };
92  //==============================================================================
93  template <typename Iterator, typename Skipper>
94  struct StringGrammar : qi::grammar<Iterator, std::string(), qi::locals<char>, Skipper> {
95  //------------------------------------------------------------------------------
97  //------------------------------------------------------------------------------
98  StringGrammar() : StringGrammar::base_type( str ) {
99  begin_quote = enc::char_( "\"'" );
100  quote = enc::char_( qi::_r1 );
101 
102  str = qi::lexeme[begin_quote[qi::_a = qi::_1] >
103  *( ( enc::char_( '\\' ) >> quote( qi::_a ) )[qi::_val += qi::_a] |
104  ( enc::char_( '\\' ) >> enc::char_( '\\' ) )[qi::_val += '\\'] |
105  ( enc::char_[qi::_val += qi::_1] - quote( qi::_a ) ) ) > quote( qi::_a )];
106  }
107  //------------------------------------------------------------------------------
108  qi::rule<Iterator, std::string(), qi::locals<char>, Skipper> str;
109  qi::rule<Iterator, char()> begin_quote;
110  qi::rule<Iterator, void( char )> quote;
111  //------------------------------------------------------------------------------
112  };
115  //==============================================================================
116  template <typename Iterator, typename Skipper>
117  struct CharGrammar : qi::grammar<Iterator, char(), Skipper> {
118  typedef char ResultT;
119  CharGrammar() : CharGrammar::base_type( ch ) {
120  ch = qi::int_parser<char>() | '\'' >> ( qi::char_ - '\'' ) >> '\'';
121  }
122  qi::rule<Iterator, char(), Skipper> ch;
123  };
125  //==============================================================================
126  template <typename Iterator, typename Skipper>
127  struct BoolGrammar : qi::grammar<Iterator, bool(), Skipper> {
128  typedef bool ResultT;
130  boolean_literal = ( qi::lit( "true" ) | "True" | "TRUE" | "1" )[qi::_val = true] |
131  ( qi::lit( "false" ) | "False" | "FALSE" | "0" )[qi::_val = false];
132  }
133  qi::rule<Iterator, bool(), Skipper> boolean_literal;
134  };
136  //==============================================================================
137  template <typename Iterator, typename RT, typename Skipper>
138  struct IntGrammar : qi::grammar<Iterator, RT(), Skipper> {
139  typedef RT ResultT;
140  IntGrammar() : IntGrammar::base_type( integer ) {
141  integer = qi::int_parser<RT>()[qi::_val = qi::_1] >> -qi::no_case[qi::char_( 'L' )];
142  }
143  qi::rule<Iterator, RT(), Skipper> integer;
144  };
145  // ----------------------------------------------------------------------------
146  // Register IntGrammar:
147  // ----------------------------------------------------------------------------
148  template <typename Iterator, typename T, typename Skipper>
149  struct Grammar_<Iterator, T, Skipper, std::enable_if_t<std::is_integral_v<T>>> {
151  };
152  //==============================================================================
153  template <typename Iterator, typename RT, typename Skipper>
154  struct RealGrammar : qi::grammar<Iterator, RT(), Skipper> {
155  typedef RT ResultT;
156  RealGrammar() : RealGrammar::base_type( real ) { real = qi::real_parser<RT>(); }
157  qi::rule<Iterator, RT(), Skipper> real;
158  };
159  // ----------------------------------------------------------------------------
160  // Register RealGrammar:
161  // ----------------------------------------------------------------------------
162  template <typename Iterator, typename T, typename Skipper>
163  struct Grammar_<Iterator, T, Skipper, std::enable_if_t<std::is_floating_point_v<T>>> {
165  };
166  //==============================================================================
167  // Grammar for std::tuples
168  //==============================================================================
169  template <typename T>
171 
172  template <typename T>
174 
175  template <typename T, typename... Ts>
176  struct tuple_remove_first_type<std::tuple<T, Ts...>> {
177  typedef std::tuple<Ts...> type;
178  };
179 
180  template <typename T, typename... Ts>
181  struct tuple_get_first_type<std::tuple<T, Ts...>> {
182  typedef T type;
183  };
184 
185  // ----------------------------------------------------------------------------
186 
187  template <typename Iterator, typename TupleT, std::size_t N, typename Skipper>
189  : qi::grammar<Iterator, TupleT(), qi::locals<typename tuple_get_first_type<TupleT>::type>, Skipper> {
190  //---------------------------------------------------------------------------
191  typedef TupleT ResultT;
194  //---------------------------------------------------------------------------
195  struct Operations {
196  //----------------------------------------------------------------------
197 
198  void operator()( ResultT& res, HeadT& head, TailT& tail ) const {
199  res = std::tuple_cat( std::tuple<HeadT>( head ), tail );
200  }
201  //----------------------------------------------------------------------
202  };
203  //---------------------------------------------------------------------------
205  tup = grHead[qi::_a = qi::_1] >> ',' >> grLast[op( qi::_val, qi::_a, qi::_1 )];
206  }
207 
210 
211  qi::rule<Iterator, ResultT(), qi::locals<HeadT>, Skipper> tup;
212  ph::function<Operations> op;
213  };
214 
215  template <typename Iterator, typename TupleT, typename Skipper>
216  struct TupleInnerGrammar<Iterator, TupleT, 1, Skipper> : qi::grammar<Iterator, TupleT(), Skipper> {
217  //---------------------------------------------------------------------------
218  typedef TupleT ResultT;
219  // typedef typename ResultT::value_type Tuple1T;
220  //---------------------------------------------------------------------------
221  struct Operations {
222  //---------------------------------------------------------------------
223  void operator()( ResultT& res, const std::tuple_element_t<0, ResultT>& val ) const {
224  res = ResultT();
225  std::get<0>( res ) = val;
226  }
227  //----------------------------------------------------------------------
228  };
229  //---------------------------------------------------------------------------
230  TupleInnerGrammar() : TupleInnerGrammar::base_type( tup ) { tup = grFirst[op( qi::_val, qi::_1 )]; }
231 
233 
234  qi::rule<Iterator, ResultT(), Skipper> tup;
235  ph::function<Operations> op;
236  };
237 
238  // ----------------------------------------------------------------------------
239  template <typename Iterator, typename TupleT, std::size_t N, typename Skipper>
240  struct TupleGrammar : qi::grammar<Iterator, TupleT(), qi::locals<char>, Skipper> {
241  typedef TupleT ResultT;
242  TupleGrammar() : TupleGrammar::base_type( tup ) {
243  begin = enc::char_( '[' )[qi::_val = ']'] | enc::char_( '(' )[qi::_val = ')'];
244  end = *( enc::char_( ',' ) ) >> enc::char_( qi::_r1 );
245 
246  tup = begin[qi::_a = qi::_1] >> grTuple[qi::_val = qi::_1] >> end( qi::_a );
247  }
248 
249  qi::rule<Iterator, char()> begin;
250  qi::rule<Iterator, void( char )> end;
251  qi::rule<Iterator, ResultT(), qi::locals<char>, Skipper> tup;
253  };
254 
255  // -----------------------------------------------------------------------------
256  // Register TupleGrammar for std::tuple:
257  // ----------------------------------------------------------------------------
258  template <typename Iterator, typename Skipper, typename... Args>
259  struct Grammar_<Iterator, std::tuple<Args...>, Skipper> {
260  typedef TupleGrammar<Iterator, std::tuple<Args...>, sizeof...( Args ), Skipper> Grammar;
261  };
262  //==============================================================================
263  template <typename Iterator, typename VectorT, typename Skipper>
264  struct VectorGrammar : qi::grammar<Iterator, VectorT(), qi::locals<char>, Skipper> {
265  //------------------------------------------------------------------------------
266  typedef VectorT ResultT;
267  //------------------------------------------------------------------------------
268  VectorGrammar() : VectorGrammar::base_type( vec ) {
269  begin =
270  enc::char_( '[' )[qi::_val = ']'] | enc::char_( '{' )[qi::_val = '}'] | enc::char_( '(' )[qi::_val = ')'];
271  end = *( enc::char_( ',' ) ) >> enc::char_( qi::_r1 );
272  list = elementGrammar % ',';
273  vec = begin[qi::_a = qi::_1] >> -list[qi::_val = qi::_1] >> end( qi::_a );
274  }
275  // ----------------------------------------------------------------------------
277  qi::rule<Iterator, char()> begin;
278  qi::rule<Iterator, void( char )> end;
279 
280  qi::rule<Iterator, ResultT(), qi::locals<char>, Skipper> vec;
281  qi::rule<Iterator, ResultT(), Skipper> list;
282  // ----------------------------------------------------------------------------
283  };
284  // ----------------------------------------------------------------------------
285  // Register VectorGrammar for std::vector:
286  // ----------------------------------------------------------------------------
287  template <typename Iterator, typename InnerT, typename AllocatorT, typename Skipper>
288  struct Grammar_<Iterator, std::vector<InnerT, AllocatorT>, Skipper> {
290  };
291  // ----------------------------------------------------------------------------
292  // Register VectorGrammar for std::list:
293  // ----------------------------------------------------------------------------
294  template <typename Iterator, typename InnerT, typename AllocatorT, typename Skipper>
295  struct Grammar_<Iterator, std::list<InnerT, AllocatorT>, Skipper> {
297  };
298  // ----------------------------------------------------------------------------
299  // Register VectorGrammar for std::set:
300  // ----------------------------------------------------------------------------
301  template <typename Iterator, typename InnerT, typename CompareT, typename AllocatorT, typename Skipper>
302  struct Grammar_<Iterator, std::set<InnerT, CompareT, AllocatorT>, Skipper> {
304  };
305  // ----------------------------------------------------------------------------
306  // Register VectorGrammar for std::unordered_set:
307  // ----------------------------------------------------------------------------
308  template <typename Iterator, typename InnerT, typename HashT, typename CompareT, typename AllocatorT,
309  typename Skipper>
310  struct Grammar_<Iterator, std::unordered_set<InnerT, HashT, CompareT, AllocatorT>, Skipper> {
312  };
313 
314  //==============================================================================
315  template <typename Iterator, typename PairT, typename Skipper>
316  struct PairGrammar : qi::grammar<Iterator, PairT(), qi::locals<char>, Skipper> {
317  //------------------------------------------------------------------------------
318  typedef PairT ResultT;
319  typedef typename PairT::first_type first_type;
320  typedef typename PairT::second_type second_type;
321  //------------------------------------------------------------------------------
322  struct first {};
323  struct second {};
324  //------------------------------------------------------------------------------
325  PairGrammar() : PairGrammar( "," ) {}
326  PairGrammar( const std::string& delimeter ) : PairGrammar::base_type( pair ) {
327  begin = enc::char_( '(' )[qi::_val = ')'] | enc::char_( '[' )[qi::_val = ']'];
328  end = qi::char_( qi::_r1 );
329  pair = begin[qi::_a = qi::_1] >> pair_in[qi::_val = qi::_1] >> end( qi::_a );
330  pair_in = key >> qi::lit( delimeter ) >> value;
331  }
332  // ----------------------------------------------------------------------------
335  qi::rule<Iterator, char()> begin;
336  qi::rule<Iterator, void( char )> end;
337  qi::rule<Iterator, ResultT(), qi::locals<char>, Skipper> pair;
339  // ph::function<Operations> op;
340  // ----------------------------------------------------------------------------
341  }; // END PairGrammar
342  // ----------------------------------------------------------------------------
343  // Register PairGrammar:
344  // ----------------------------------------------------------------------------
345  template <typename Iterator, typename KeyT, typename ValueT, typename Skipper>
346  struct Grammar_<Iterator, std::pair<KeyT, ValueT>, Skipper> {
348  };
349  // ============================================================================
350  template <typename Iterator, typename MapT, typename Skipper>
351  struct MapGrammar : qi::grammar<Iterator, MapT(), Skipper> {
352  //------------------------------------------------------------------------------
353  typedef MapT ResultT;
354  typedef typename MapT::key_type KeyT;
355  typedef typename MapT::mapped_type MappedT;
357 
359  //------------------------------------------------------------------------------
360  struct tag_key {};
361  struct tag_mapped {};
362  struct Operations {
363  //----------------------------------------------------------------------
364  void operator()( ResultT& res, const VectorPairT& vec ) const {
365  for ( auto cur = vec.begin(); cur != vec.end(); ++cur ) { res.insert( *cur ); }
366  }
367  void operator()( PairT& res, const KeyT& key, tag_key ) const { res.first = key; }
368  void operator()( PairT& res, const MappedT& value, tag_mapped ) const { res.second = value; }
369  //----------------------------------------------------------------------
370  };
371  //------------------------------------------------------------------------------
372  MapGrammar() : MapGrammar::base_type( map ) {
373  pair = key[op( qi::_val, qi::_1, tag_key() )] > ( qi::lit( ':' ) | '=' ) >
374  value[op( qi::_val, qi::_1, tag_mapped() )];
375  list = -( pair % enc::char_( ',' ) );
376  map = ( ( '[' >> list >> ']' ) | ( '{' >> list >> '}' ) | ( '[' >> list >> ',' >> ']' ) |
377  ( '{' >> list >> ',' >> '}' ) )[op( qi::_val, qi::_1 )];
378  }
379  // ----------------------------------------------------------------------------
382  qi::rule<Iterator, PairT(), Skipper> pair;
384  qi::rule<Iterator, ResultT(), Skipper> map;
385  ph::function<Operations> op;
386  // ----------------------------------------------------------------------------
387  };
388  // ----------------------------------------------------------------------------
389  // Register MapGrammar for std::map:
390  // ----------------------------------------------------------------------------
391  template <typename Iterator, typename KeyT, typename ValueT, typename KeyCompareT, typename AllocatorT,
392  typename Skipper>
393  struct Grammar_<Iterator, std::map<KeyT, ValueT, KeyCompareT, AllocatorT>, Skipper> {
395  };
396  // ----------------------------------------------------------------------------
397  // Register MapGrammar for std::unordered_map:
398  // ----------------------------------------------------------------------------
399  template <typename Iterator, typename KeyT, typename ValueT, typename HashT, typename KeyCompareT,
400  typename AllocatorT, typename Skipper>
401  struct Grammar_<Iterator, std::unordered_map<KeyT, ValueT, HashT, KeyCompareT, AllocatorT>, Skipper> {
403  };
404  // ----------------------------------------------------------------------------
405  // Register MapGrammar for GaudiUtils::VectorMap:
406  // ----------------------------------------------------------------------------
407  template <typename Iterator, typename KeyT, typename ValueT, typename KeyCompareT, typename AllocatorT,
408  typename Skipper>
409  struct Grammar_<Iterator, GaudiUtils::VectorMap<KeyT, ValueT, KeyCompareT, AllocatorT>, Skipper> {
411  };
412  // ============================================================================
413  template <typename Iterator, typename PointT, typename Skipper>
414  struct Pnt3DGrammar : qi::grammar<Iterator, PointT(), Skipper> {
415  typedef PointT ResultT;
416  typedef typename PointT::Scalar Scalar;
417  // ----------------------------------------------------------------------------
418  struct Operations {
419  void operator()( ResultT& res, const Scalar& scalar, const char xyz ) const {
420  switch ( xyz ) {
421  case 'x':
422  res.SetX( scalar );
423  break;
424  case 'y':
425  res.SetY( scalar );
426  break;
427  case 'z':
428  res.SetZ( scalar );
429  break;
430  default:
431  break;
432  }
433  }
434  }; // Operations
435  // ----------------------------------------------------------------------------
436  Pnt3DGrammar() : Pnt3DGrammar::base_type( point ) {
437  point = list | ( '(' >> list >> ')' ) | ( '[' >> list >> ']' );
438  list = -( enc::no_case[qi::lit( "x" ) | qi::lit( "px" )] >> ':' ) >> scalar[op( qi::_val, qi::_1, 'x' )] >>
439  ',' >> -( enc::no_case[qi::lit( "y" ) | qi::lit( "py" )] >> ':' ) >>
440  scalar[op( qi::_val, qi::_1, 'y' )] >> ',' >>
441  -( enc::no_case[qi::lit( "z" ) | qi::lit( "pz" )] >> ':' ) >> scalar[op( qi::_val, qi::_1, 'z' )];
442  }
443  // ----------------------------------------------------------------------------
446  ph::function<Operations> op;
447  // ----------------------------------------------------------------------------
448  }; // Pnt3DGrammar
449  // ----------------------------------------------------------------------------
450  // Register Pnt3DGrammar for ROOT::Math::PositionVector3D:
451  // ----------------------------------------------------------------------------
452  template <typename Iterator, typename T1, typename T2, typename Skipper>
453  struct Grammar_<Iterator, ROOT::Math::PositionVector3D<T1, T2>, Skipper> {
455  };
456  // ----------------------------------------------------------------------------
457  // Register Pnt3DGrammar for ROOT::Math::DisplacementVector3D:
458  // ----------------------------------------------------------------------------
459  template <typename Iterator, typename T1, typename T2, typename Skipper>
460  struct Grammar_<Iterator, ROOT::Math::DisplacementVector3D<T1, T2>, Skipper> {
462  };
463  // ============================================================================
464  template <typename Iterator, typename PointT, typename Skipper>
465  struct Pnt4DGrammar : qi::grammar<Iterator, PointT(), Skipper> {
466  typedef PointT ResultT;
467  typedef typename PointT::Scalar ScalarT;
468  //-----------------------------------------------------------------------------
469  struct Operations {
470 
471  void operator()( ResultT& res, const ScalarT& scalar, const char xyz ) const {
472  switch ( xyz ) {
473  case 'x':
474  res.SetPx( scalar );
475  break;
476  case 'y':
477  res.SetPy( scalar );
478  break;
479  case 'z':
480  res.SetPz( scalar );
481  break;
482  case 'e':
483  res.SetE( scalar );
484  break;
485  default:
486  break;
487  }
488  }
489  void operator()( ResultT& res, const ResultT& xyz ) const {
490  res.SetPx( xyz.Px() );
491  res.SetPy( xyz.Py() );
492  res.SetPz( xyz.Pz() );
493  }
494  }; // Operations
495  // ----------------------------------------------------------------------------
496  Pnt4DGrammar() : Pnt4DGrammar::base_type( point4d ) {
497  point4d = list4d | ( '(' >> list4d >> ')' ) | ( '[' >> list4d >> ']' );
498  list4d = ( point3d[op( qi::_val, qi::_1 )] >> enc::char_( ";," ) >> e[op( qi::_val, qi::_1, 'e' )] ) |
499  ( e[op( qi::_val, qi::_1, 'e' )] >> enc::char_( ";," ) >> point3d[op( qi::_val, qi::_1 )] );
500  e = -( enc::no_case[enc::char_( "te" )] >> ':' ) >> scalar[qi::_val = qi::_1];
501 
502  point3d = list3d | ( '(' >> list3d >> ')' ) | ( '[' >> list3d >> ']' );
503  list3d = -( enc::no_case[qi::lit( "x" ) | qi::lit( "px" )] >> ':' ) >> scalar[op( qi::_val, qi::_1, 'x' )] >>
504  ',' >> -( enc::no_case[qi::lit( "y" ) | qi::lit( "py" )] >> ':' ) >>
505  scalar[op( qi::_val, qi::_1, 'y' )] >> ',' >>
506  -( enc::no_case[qi::lit( "z" ) | qi::lit( "pz" )] >> ':' ) >> scalar[op( qi::_val, qi::_1, 'z' )];
507  }
508  // ----------------------------------------------------------------------------
510  qi::rule<Iterator, ScalarT(), Skipper> e;
512  ph::function<Operations> op;
513  // ----------------------------------------------------------------------------
514  }; // Pnt4DGrammar
515  // ----------------------------------------------------------------------------
516  // Register Pnt4DGrammar for ROOT::Math::LorentzVector:
517  // ----------------------------------------------------------------------------
518  template <typename Iterator, typename T1, typename Skipper>
519  struct Grammar_<Iterator, ROOT::Math::LorentzVector<T1>, Skipper> {
521  };
522  // ============================================================================
523  template <typename Iterator, typename Skipper>
524  struct Histo1DGrammar : qi::grammar<Iterator, Gaudi::Histo1DDef(), qi::locals<char>, Skipper> {
526  // ----------------------------------------------------------------------------
527  struct Operations {
528  void operator()( ResultT& res, const std::string& title ) const { res.setTitle( title ); }
529  void operator()( ResultT& res, const double& val, const char lh ) const {
530  switch ( lh ) {
531  case 'l':
532  res.setLowEdge( val );
533  break;
534  case 'h':
535  res.setHighEdge( val );
536  break;
537  default:
538  break;
539  }
540  }
541  void operator()( ResultT& res, int val ) const { res.setBins( val ); }
542  void operator()( ResultT& res ) const {}
543  }; // Operations
544  // ----------------------------------------------------------------------------
545  Histo1DGrammar() : Histo1DGrammar::base_type( hist ) {
546  val1 = title[op( qi::_val, qi::_1 )] >> ',' >> qi::double_[op( qi::_val, qi::_1, 'l' )] >> ',' >>
547  qi::double_[op( qi::_val, qi::_1, 'h' )] >> -( ',' >> qi::int_[op( qi::_val, qi::_1 )] );
548  val2 = qi::double_[op( qi::_val, qi::_1, 'l' )] >> ',' >> qi::double_[op( qi::_val, qi::_1, 'h' )] >> ',' >>
549  title[op( qi::_val, qi::_1 )] >> -( ',' >> qi::int_[op( qi::_val, qi::_1 )] );
550  val3 = qi::double_[op( qi::_val, qi::_1, 'l' )] >> ',' >> qi::double_[op( qi::_val, qi::_1, 'h' )] >>
551  -( ',' >> title[op( qi::_val, qi::_1 )] ) >> -( ',' >> qi::int_[op( qi::_val, qi::_1 )] );
552  begin = enc::char_( '[' )[qi::_val = ']'] | enc::char_( '(' )[qi::_val = ')'];
553  end = enc::char_( qi::_r1 );
554  hist = begin[qi::_a = qi::_1] >> ( val1 | val2 | val3 )[qi::_val = qi::_1] >> end( qi::_a );
555  }
556  // ----------------------------------------------------------------------------
557  qi::rule<Iterator, ResultT(), qi::locals<char>, Skipper> hist;
559  qi::rule<Iterator, char()> begin;
560  qi::rule<Iterator, void( char )> end;
562  ph::function<Operations> op;
563  // ----------------------------------------------------------------------------
564  }; // Histo1DGrammar
565  // ----------------------------------------------------------------------------
567  // ============================================================================
568  template <typename Iterator, typename Skipper>
569  struct KeyValueGrammar : qi::grammar<Iterator, std::pair<std::string, std::string>(), Skipper> {
570  //------------------------------------------------------------------------------
572  //------------------------------------------------------------------------------
573  struct first {};
574  struct second {};
575 
577  //------------------------------------------------------------------------------
578  pair = gstring >> ":" >> +enc::char_;
579  }
580  // ----------------------------------------------------------------------------
582  qi::rule<Iterator, ResultT(), Skipper> pair;
583  // ----------------------------------------------------------------------------
584  }; // END KeyValueGrammar
585  // We don't register KeyalueGrammar because it's a special parser
586  // ============================================================================
587  } // namespace Parsers
588 } // namespace Gaudi
Gaudi::Parsers::Histo1DGrammar::val3
qi::rule< Iterator, ResultT(), Skipper > val3
Definition: Grammars.h:558
Gaudi::Parsers::TupleGrammar::grTuple
TupleInnerGrammar< Iterator, TupleT, N, Skipper > grTuple
Definition: Grammars.h:252
Gaudi::Parsers::PairGrammar::PairGrammar
PairGrammar()
Definition: Grammars.h:325
Gaudi::Parsers::CharGrammar::ResultT
char ResultT
Definition: Grammars.h:118
Gaudi::Parsers::RealGrammar::RealGrammar
RealGrammar()
Definition: Grammars.h:156
Gaudi::Parsers::StringGrammar::begin_quote
qi::rule< Iterator, char()> begin_quote
Definition: Grammar.h:75
Gaudi::Parsers::MapGrammar::tag_key
Definition: Grammars.h:360
Gaudi::Parsers::IntGrammar
Definition: Grammars.h:138
Gaudi::Parsers::MapGrammar::Operations::operator()
void operator()(ResultT &res, const VectorPairT &vec) const
Definition: Grammars.h:364
Gaudi::Parsers::KeyValueGrammar
Definition: Grammars.h:569
Gaudi::Parsers::MapGrammar::Operations
Definition: Grammars.h:362
std::string
STL class.
Gaudi::Parsers::MapGrammar::MapGrammar
MapGrammar()
Definition: Grammars.h:372
Gaudi::Parsers::PairGrammar::first
Definition: Grammars.h:322
Gaudi::Parsers::Histo1DGrammar::begin
qi::rule< Iterator, char()> begin
Definition: Grammars.h:559
Gaudi::Parsers::Grammar_< Iterator, T, Skipper, std::enable_if_t< std::is_floating_point_v< T > > >::Grammar
RealGrammar< Iterator, T, Skipper > Grammar
Definition: Grammars.h:164
IOTest.N
N
Definition: IOTest.py:110
Gaudi::Parsers::PairGrammar::second_type
PairT::second_type second_type
Definition: Grammars.h:320
Gaudi::Parsers::MapGrammar::Operations::operator()
void operator()(PairT &res, const KeyT &key, tag_key) const
Definition: Grammars.h:367
Gaudi::Parsers::BoolGrammar::BoolGrammar
BoolGrammar()
Definition: Grammars.h:129
Gaudi::Parsers::MapGrammar::list
qi::rule< Iterator, VectorPairT(), Skipper > list
Definition: Grammars.h:383
Gaudi::Parsers::KeyValueGrammar::second
Definition: Grammars.h:574
Gaudi::Parsers::VectorGrammar
Definition: Grammars.h:264
Gaudi::Parsers::KeyValueGrammar::gstring
StringGrammar< Iterator, Skipper > gstring
Definition: Grammars.h:581
Gaudi::Parsers::Pnt4DGrammar::op
ph::function< Operations > op
Definition: Grammars.h:512
Gaudi::Histo1DDef::setLowEdge
void setLowEdge(double value)
set low edge
Definition: HistoDef.h:74
std::pair
Gaudi::Parsers::TupleGrammar::tup
qi::rule< Iterator, ResultT(), qi::locals< char >, Skipper > tup
Definition: Grammars.h:251
Gaudi::Parsers::TupleGrammar::end
qi::rule< Iterator, void(char)> end
Definition: Grammars.h:250
Gaudi::Parsers::DefaultIterator
std::string::const_iterator DefaultIterator
Definition: Grammars.h:64
Gaudi::Parsers::Pnt3DGrammar::Operations
Definition: Grammars.h:418
Gaudi::Parsers::Grammar_< Iterator, ROOT::Math::PositionVector3D< T1, T2 >, Skipper >::Grammar
Pnt3DGrammar< Iterator, ROOT::Math::PositionVector3D< T1, T2 >, Skipper > Grammar
Definition: Grammars.h:454
Gaudi::Parsers::VectorGrammar::list
qi::rule< Iterator, ResultT(), Skipper > list
Definition: Grammars.h:281
Gaudi::Parsers::Pnt3DGrammar::Operations::operator()
void operator()(ResultT &res, const Scalar &scalar, const char xyz) const
Definition: Grammars.h:419
Gaudi::Parsers::PairGrammar::second
Definition: Grammars.h:323
std::vector
STL class.
Gaudi::Parsers::TupleInnerGrammar< Iterator, TupleT, 1, Skipper >::grFirst
Grammar_< Iterator, std::tuple_element_t< 0, ResultT >, Skipper >::Grammar grFirst
Definition: Grammars.h:232
Gaudi::Parsers::Pnt4DGrammar::Operations::operator()
void operator()(ResultT &res, const ResultT &xyz) const
Definition: Grammars.h:489
Gaudi::Parsers::DefaultSkipper
enc::space_type DefaultSkipper
Definition: Grammars.h:65
Gaudi::Parsers::PairGrammar::first_type
PairT::first_type first_type
Definition: Grammars.h:319
Gaudi::Parsers::KeyValueGrammar::pair
qi::rule< Iterator, ResultT(), Skipper > pair
Definition: Grammars.h:582
Gaudi::Parsers::Pnt4DGrammar::list4d
qi::rule< Iterator, ResultT(), Skipper > list4d
Definition: Grammars.h:509
Gaudi::Parsers::Pnt4DGrammar::e
qi::rule< Iterator, ScalarT(), Skipper > e
Definition: Grammars.h:510
Gaudi::Parsers::Histo1DGrammar::Histo1DGrammar
Histo1DGrammar()
Definition: Grammars.h:545
Gaudi::Parsers::Pnt4DGrammar::Pnt4DGrammar
Pnt4DGrammar()
Definition: Grammars.h:496
Gaudi::Parsers::Pnt3DGrammar
Definition: Grammars.h:414
Gaudi::Parsers::RealGrammar::ResultT
RT ResultT
Definition: Grammars.h:155
StringKey.h
Gaudi::Parsers::Grammar_< Iterator, ROOT::Math::LorentzVector< T1 >, Skipper >::Grammar
Pnt4DGrammar< Iterator, ROOT::Math::LorentzVector< T1 >, Skipper > Grammar
Definition: Grammars.h:520
Gaudi::Parsers::Histo1DGrammar::op
ph::function< Operations > op
Definition: Grammars.h:562
Gaudi::Parsers::Histo1DGrammar::title
StringGrammar< Iterator, Skipper > title
Definition: Grammars.h:561
Gaudi::Parsers::VectorGrammar::end
qi::rule< Iterator, void(char)> end
Definition: Grammars.h:278
Gaudi::Parsers::TupleInnerGrammar::op
ph::function< Operations > op
Definition: Grammars.h:212
std::tuple
Gaudi::Parsers::Grammar_< Iterator, std::set< InnerT, CompareT, AllocatorT >, Skipper >::Grammar
VectorGrammar< Iterator, std::set< InnerT, CompareT, AllocatorT >, Skipper > Grammar
Definition: Grammars.h:303
Gaudi::Parsers::PairGrammar::pair_in
qi::rule< Iterator, ResultT(), Skipper > pair_in
Definition: Grammars.h:338
Gaudi::Parsers::MapGrammar::map
qi::rule< Iterator, ResultT(), Skipper > map
Definition: Grammars.h:384
Gaudi::Parsers::TupleInnerGrammar::TupleInnerGrammar
TupleInnerGrammar()
Definition: Grammars.h:204
Gaudi::Parsers::PairGrammar::value
Grammar_< Iterator, typename PairT::second_type, Skipper >::Grammar value
Definition: Grammars.h:334
Containers::map
struct GAUDI_API map
Parametrisation class for map-like implementation.
Definition: KeyedObjectManager.h:35
Gaudi::Parsers::MapGrammar::tag_mapped
Definition: Grammars.h:361
Gaudi::Parsers::StringGrammar::StringGrammar
StringGrammar()
Definition: Grammars.h:98
Gaudi::Parsers::TupleGrammar::begin
qi::rule< Iterator, char()> begin
Definition: Grammars.h:249
Gaudi::Parsers::TupleGrammar
Definition: Grammars.h:240
Gaudi::Parsers::PairGrammar::ResultT
PairT ResultT
Definition: Grammars.h:318
Gaudi::Parsers::Pnt4DGrammar::ResultT
PointT ResultT
Definition: Grammars.h:466
Gaudi::Parsers::MapGrammar::MappedT
MapT::mapped_type MappedT
Definition: Grammars.h:355
HashMap.h
HistoDef.h
Gaudi::Parsers::tuple_remove_first_type
Definition: Grammars.h:170
Gaudi::Parsers::Pnt3DGrammar::list
qi::rule< Iterator, ResultT(), Skipper > list
Definition: Grammars.h:444
Gaudi::Parsers::KeyValueGrammar::first
Definition: Grammars.h:573
Gaudi::Parsers::Pnt4DGrammar::ScalarT
PointT::Scalar ScalarT
Definition: Grammars.h:467
Gaudi::Parsers::SkipperGrammar::SkipperGrammar
SkipperGrammar()
Definition: Grammars.h:86
compareOutputFiles.sp
sp
Definition: compareOutputFiles.py:506
Gaudi::Parsers::VectorGrammar::begin
qi::rule< Iterator, char()> begin
Definition: Grammars.h:277
Gaudi::Histo1DDef::setTitle
void setTitle(std::string value)
set the title
Definition: HistoDef.h:80
Gaudi::Parsers::Grammar_< Iterator, ROOT::Math::DisplacementVector3D< T1, T2 >, Skipper >::Grammar
Pnt3DGrammar< Iterator, ROOT::Math::DisplacementVector3D< T1, T2 >, Skipper > Grammar
Definition: Grammars.h:461
Gaudi::StringKey
Definition: StringKey.h:44
Gaudi::Histo1DDef
Definition: HistoDef.h:41
Gaudi::Parsers::TupleInnerGrammar::Operations
Definition: Grammars.h:195
VectorMap.h
Gaudi::Parsers::CharGrammar::ch
qi::rule< Iterator, char(), Skipper > ch
Definition: Grammars.h:122
Gaudi::Parsers::Histo1DGrammar::end
qi::rule< Iterator, void(char)> end
Definition: Grammars.h:560
Gaudi::Parsers::TupleInnerGrammar::ResultT
TupleT ResultT
Definition: Grammars.h:191
Gaudi::Parsers::tuple_get_first_type
Definition: Grammars.h:173
Gaudi::Parsers::PairGrammar
Definition: Grammars.h:316
Gaudi::Parsers::tuple_remove_first_type< std::tuple< T, Ts... > >::type
std::tuple< Ts... > type
Definition: Grammars.h:177
Gaudi::Parsers::MapGrammar::Operations::operator()
void operator()(PairT &res, const MappedT &value, tag_mapped) const
Definition: Grammars.h:368
Gaudi::Parsers::IntGrammar::ResultT
RT ResultT
Definition: Grammars.h:139
Gaudi::Parsers::Pnt3DGrammar::scalar
Grammar_< Iterator, Scalar, Skipper >::Grammar scalar
Definition: Grammars.h:445
Gaudi::Histo1DDef::setHighEdge
void setHighEdge(double value)
set high edge
Definition: HistoDef.h:76
Gaudi::Parsers::RealGrammar::real
qi::rule< Iterator, Node(), Skipper > real
Definition: Grammar.h:121
Gaudi::Parsers::PairGrammar::key
Grammar_< Iterator, typename PairT::first_type, Skipper >::Grammar key
Definition: Grammars.h:333
Gaudi::Parsers::TupleInnerGrammar< Iterator, TupleT, 1, Skipper >::ResultT
TupleT ResultT
Definition: Grammars.h:218
Gaudi::Parsers::StringGrammar
Definition: Grammar.h:60
Gaudi::Parsers::MapGrammar::pair
qi::rule< Iterator, PairT(), Skipper > pair
Definition: Grammars.h:382
Gaudi::Parsers::TupleInnerGrammar::HeadT
tuple_get_first_type< TupleT >::type HeadT
Definition: Grammars.h:193
Gaudi::Parsers::TupleInnerGrammar< Iterator, TupleT, 1, Skipper >::TupleInnerGrammar
TupleInnerGrammar()
Definition: Grammars.h:230
Gaudi::Parsers::Pnt4DGrammar::Operations
Definition: Grammars.h:469
Gaudi::Parsers::Histo1DGrammar::Operations::operator()
void operator()(ResultT &res) const
Definition: Grammars.h:542
ROOT
Definition: IMagneticFieldSvc.h:19
Point3DTypes.h
Gaudi::Parsers::VectorGrammar::vec
qi::rule< Iterator, ResultT(), qi::locals< char >, Skipper > vec
Definition: Grammars.h:280
Gaudi::Parsers::MapGrammar::PairT
std::pair< KeyT, MappedT > PairT
Definition: Grammars.h:356
Gaudi::Parsers::StringGrammar::quote
qi::rule< Iterator, void(char)> quote
Definition: Grammar.h:76
Gaudi::Parsers::CharGrammar
Definition: Grammars.h:117
Gaudi::Parsers::Histo1DGrammar
Definition: Grammars.h:524
Gaudi::Parsers::Pnt4DGrammar::point3d
qi::rule< Iterator, ResultT(), Skipper > point3d
Definition: Grammars.h:509
Gaudi::Parsers::Histo1DGrammar::Operations::operator()
void operator()(ResultT &res, int val) const
Definition: Grammars.h:541
Gaudi::Parsers::Grammar_< Iterator, std::unordered_set< InnerT, HashT, CompareT, AllocatorT >, Skipper >::Grammar
VectorGrammar< Iterator, std::unordered_set< InnerT, HashT, CompareT, AllocatorT >, Skipper > Grammar
Definition: Grammars.h:311
Gaudi::Parsers::PairGrammar::pair
qi::rule< Iterator, ResultT(), qi::locals< char >, Skipper > pair
Definition: Grammars.h:337
Gaudi::Parsers::PairGrammar::end
qi::rule< Iterator, void(char)> end
Definition: Grammars.h:336
Gaudi::Parsers::Histo1DGrammar::Operations::operator()
void operator()(ResultT &res, const std::string &title) const
Definition: Grammars.h:528
Gaudi::Parsers::SkipperGrammar::comments
qi::rule< Iterator > comments
Definition: Grammar.h:56
Gaudi::Parsers::TupleInnerGrammar::grLast
TupleInnerGrammar< Iterator, TailT, N - 1, Skipper > grLast
Definition: Grammars.h:208
Gaudi::Parsers::BoolGrammar
Definition: Grammar.h:100
Gaudi::Parsers::Grammar_< Iterator, GaudiUtils::VectorMap< KeyT, ValueT, KeyCompareT, AllocatorT >, Skipper >::Grammar
MapGrammar< Iterator, GaudiUtils::VectorMap< KeyT, ValueT, KeyCompareT, AllocatorT >, Skipper > Grammar
Definition: Grammars.h:410
Gaudi::Parsers::SkipperGrammar
Definition: Grammar.h:51
Gaudi::Parsers::BoolGrammar::boolean_literal
qi::rule< Iterator, bool(), Skipper > boolean_literal
Definition: Grammars.h:133
Gaudi::Parsers::TupleInnerGrammar< Iterator, TupleT, 1, Skipper >::Operations::operator()
void operator()(ResultT &res, const std::tuple_element_t< 0, ResultT > &val) const
Definition: Grammars.h:223
Gaudi::Parsers::Pnt4DGrammar::point4d
qi::rule< Iterator, ResultT(), Skipper > point4d
Definition: Grammars.h:509
Gaudi::Parsers::Pnt3DGrammar::ResultT
PointT ResultT
Definition: Grammars.h:415
Gaudi::Parsers::TupleInnerGrammar< Iterator, TupleT, 1, Skipper >::tup
qi::rule< Iterator, ResultT(), Skipper > tup
Definition: Grammars.h:234
Gaudi::Parsers::MapGrammar::KeyT
MapT::key_type KeyT
Definition: Grammars.h:354
Gaudi::Parsers::Grammar_< Iterator, std::map< KeyT, ValueT, KeyCompareT, AllocatorT >, Skipper >::Grammar
MapGrammar< Iterator, std::map< KeyT, ValueT, KeyCompareT, AllocatorT >, Skipper > Grammar
Definition: Grammars.h:394
Gaudi::Parsers::PairGrammar::PairGrammar
PairGrammar(const std::string &delimeter)
Definition: Grammars.h:326
Gaudi::Parsers::CharGrammar::CharGrammar
CharGrammar()
Definition: Grammars.h:119
Gaudi
Header file for std:chrono::duration-based Counters.
Definition: __init__.py:1
Gaudi::Parsers::Pnt4DGrammar
Definition: Grammars.h:465
Gaudi::Parsers::BoolGrammar::ResultT
bool ResultT
Definition: Grammars.h:128
Gaudi::Parsers::Grammar_< Iterator, std::list< InnerT, AllocatorT >, Skipper >::Grammar
VectorGrammar< Iterator, std::list< InnerT, AllocatorT >, Skipper > Grammar
Definition: Grammars.h:296
Gaudi::Parsers::PairGrammar::begin
qi::rule< Iterator, char()> begin
Definition: Grammars.h:335
Gaudi::Parsers::TupleInnerGrammar::grHead
Grammar_< Iterator, HeadT, Skipper >::Grammar grHead
Definition: Grammars.h:209
Gaudi::Parsers::tuple_get_first_type< std::tuple< T, Ts... > >::type
T type
Definition: Grammars.h:182
Gaudi::Parsers::Histo1DGrammar::hist
qi::rule< Iterator, ResultT(), qi::locals< char >, Skipper > hist
Definition: Grammars.h:557
Gaudi::Parsers::KeyValueGrammar::KeyValueGrammar
KeyValueGrammar()
Definition: Grammars.h:576
Gaudi::Parsers::MapGrammar::key
Grammar_< Iterator, typename MapT::key_type, Skipper >::Grammar key
Definition: Grammars.h:380
Gaudi::Parsers::TupleInnerGrammar::tup
qi::rule< Iterator, ResultT(), qi::locals< HeadT >, Skipper > tup
Definition: Grammars.h:211
Gaudi::Parsers::Pnt3DGrammar::point
qi::rule< Iterator, ResultT(), Skipper > point
Definition: Grammars.h:444
Containers::vector
struct GAUDI_API vector
Parametrisation class for vector-like implementation.
Definition: KeyedObjectManager.h:39
Gaudi::Parsers::VectorGrammar::ResultT
VectorT ResultT
Definition: Grammars.h:266
Gaudi::Parsers::Histo1DGrammar::Operations::operator()
void operator()(ResultT &res, const double &val, const char lh) const
Definition: Grammars.h:529
Gaudi::Parsers::Skipper
SkipperGrammar< IteratorT > Skipper
Definition: Factory.h:36
Gaudi::Parsers::REGISTER_GRAMMAR
REGISTER_GRAMMAR(std::string, StringGrammar)
Gaudi::Parsers::Grammar_< Iterator, std::pair< KeyT, ValueT >, Skipper >::Grammar
PairGrammar< Iterator, std::pair< KeyT, ValueT >, Skipper > Grammar
Definition: Grammars.h:347
Gaudi::Parsers::MapGrammar::VectorPairT
std::vector< PairT > VectorPairT
Definition: Grammars.h:358
Gaudi::Parsers::Grammar_< Iterator, std::unordered_map< KeyT, ValueT, HashT, KeyCompareT, AllocatorT >, Skipper >::Grammar
MapGrammar< Iterator, std::unordered_map< KeyT, ValueT, HashT, KeyCompareT, AllocatorT >, Skipper > Grammar
Definition: Grammars.h:402
Gaudi::Parsers::Grammar_< Iterator, std::vector< InnerT, AllocatorT >, Skipper >::Grammar
VectorGrammar< Iterator, std::vector< InnerT, AllocatorT >, Skipper > Grammar
Definition: Grammars.h:289
Gaudi::Parsers::VectorGrammar::VectorGrammar
VectorGrammar()
Definition: Grammars.h:268
Gaudi::Parsers::StringGrammar::ResultT
std::string ResultT
Definition: Grammars.h:96
Gaudi::Parsers::Grammar_
Definition: Grammars.h:68
std::vector::begin
T begin(T... args)
Gaudi::Parsers::Pnt3DGrammar::Scalar
PointT::Scalar Scalar
Definition: Grammars.h:416
Gaudi::Parsers::VectorGrammar::elementGrammar
Grammar_< Iterator, typename VectorT::value_type, Skipper >::Grammar elementGrammar
Definition: Grammars.h:276
std
STL namespace.
Gaudi::Parsers::Histo1DGrammar::val1
qi::rule< Iterator, ResultT(), Skipper > val1
Definition: Grammars.h:558
Gaudi::Parsers::TupleGrammar::ResultT
TupleT ResultT
Definition: Grammars.h:241
Gaudi::Parsers::TupleInnerGrammar
Definition: Grammars.h:189
Point4DTypes.h
Gaudi::Parsers::MapGrammar::value
Grammar_< Iterator, typename MapT::mapped_type, Skipper >::Grammar value
Definition: Grammars.h:381
Gaudi::Parsers::MapGrammar::ResultT
MapT ResultT
Definition: Grammars.h:353
Gaudi::Parsers::TupleInnerGrammar::Operations::operator()
void operator()(ResultT &res, HeadT &head, TailT &tail) const
Definition: Grammars.h:198
Gaudi::Parsers::TupleGrammar::TupleGrammar
TupleGrammar()
Definition: Grammars.h:242
Gaudi::Parsers::Histo1DGrammar::ResultT
Gaudi::Histo1DDef ResultT
Definition: Grammars.h:525
Gaudi::Parsers::RealGrammar::real
qi::rule< Iterator, RT(), Skipper > real
Definition: Grammars.h:157
std::tuple_cat
T tuple_cat(T... args)
Gaudi::Parsers::Pnt3DGrammar::Pnt3DGrammar
Pnt3DGrammar()
Definition: Grammars.h:436
Gaudi::Parsers::IntGrammar::integer
qi::rule< Iterator, RT(), Skipper > integer
Definition: Grammars.h:143
std::vector::end
T end(T... args)
GaudiUtils
Definition: GaudiHistoID.h:146
Gaudi::Parsers::Pnt3DGrammar::op
ph::function< Operations > op
Definition: Grammars.h:446
Gaudi::Histo1DDef::setBins
void setBins(int value)
set number of bis
Definition: HistoDef.h:78
Gaudi::Parsers::Histo1DGrammar::val2
qi::rule< Iterator, ResultT(), Skipper > val2
Definition: Grammars.h:558
Gaudi::Parsers::IntGrammar::IntGrammar
IntGrammar()
Definition: Grammars.h:140
Gaudi::Parsers::Pnt4DGrammar::list3d
qi::rule< Iterator, ResultT(), Skipper > list3d
Definition: Grammars.h:509
Gaudi::Parsers::Pnt4DGrammar::Operations::operator()
void operator()(ResultT &res, const ScalarT &scalar, const char xyz) const
Definition: Grammars.h:471
Gaudi::Parsers::Pnt4DGrammar::scalar
Grammar_< Iterator, ScalarT, Skipper >::Grammar scalar
Definition: Grammars.h:511
Gaudi::Parsers::KeyValueGrammar::ResultT
std::pair< std::string, std::string > ResultT
Definition: Grammars.h:571
Gaudi::Parsers::TupleInnerGrammar< Iterator, TupleT, 1, Skipper >::op
ph::function< Operations > op
Definition: Grammars.h:235
Gaudi::Parsers::Grammar_::BOOST_MPL_ASSERT_MSG
BOOST_MPL_ASSERT_MSG(false, GRAMMAR_FOR_TYPE_DOES_NOT_EXISTS,(T))
Gaudi::Parsers::Grammar_< Iterator, T, Skipper, std::enable_if_t< std::is_integral_v< T > > >::Grammar
IntGrammar< Iterator, T, Skipper > Grammar
Definition: Grammars.h:150
Gaudi::Parsers::MapGrammar
Definition: Grammars.h:351
Gaudi::Parsers::RealGrammar
Definition: Grammar.h:112
Iterator
boost::spirit::classic::position_iterator2< ForwardIterator > Iterator
Definition: Iterator.h:28
Gaudi::Parsers::StringGrammar::str
qi::rule< Iterator, std::string(), qi::locals< char >, Skipper > str
Definition: Grammar.h:74
Gaudi::Parsers::MapGrammar::op
ph::function< Operations > op
Definition: Grammars.h:385
Gaudi::Parsers::Histo1DGrammar::Operations
Definition: Grammars.h:527
Gaudi::Parsers::TupleInnerGrammar::TailT
tuple_remove_first_type< TupleT >::type TailT
Definition: Grammars.h:192