The Gaudi Framework  master (37c0b60a)
CommonParsers.h
Go to the documentation of this file.
1 /***********************************************************************************\
2 * (c) Copyright 1998-2024 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 // Include files
14 // ============================================================================
15 // STD & STL
16 // ============================================================================
17 #include <list>
18 #include <map>
19 #include <set>
20 #include <string>
21 #include <unordered_set>
22 #include <vector>
23 
24 // ============================================================================
25 #include <GaudiKernel/HistoDef.h>
26 #include <GaudiKernel/Map.h>
27 #include <GaudiKernel/StatusCode.h>
28 // ============================================================================
29 #define PARSERS_DECL_FOR_SINGLE( Type ) GAUDI_API StatusCode parse( Type& result, std::string_view input );
30 
31 #define PARSERS_DECL_FOR_PAIR( FirstType, SecondType ) \
32  GAUDI_API StatusCode parse( std::pair<FirstType, SecondType>& result, std::string_view input );
33 
34 #define PARSERS_DECL_FOR_LIST( InnerType ) \
35  GAUDI_API StatusCode parse( std::vector<InnerType>& result, std::string_view input );
36 
37 #define PARSERS_DECL_FOR_SET( InnerType ) \
38  GAUDI_API StatusCode parse( std::set<InnerType>& result, std::string_view input ); \
39  GAUDI_API StatusCode parse( std::unordered_set<InnerType>& result, std::string_view input );
40 
41 // ============================================================================
73 // ============================================================================
74 namespace Gaudi {
75  // ==========================================================================
76  class Histo1DDef;
77  // ==========================================================================
78  namespace Parsers {
79  // ========================================================================
91  // ========================================================================
105  PARSERS_DECL_FOR_SINGLE( unsigned char )
107  PARSERS_DECL_FOR_SINGLE( signed char )
108  // ========================================================================
122  PARSERS_DECL_FOR_SINGLE( short )
124  PARSERS_DECL_FOR_SINGLE( unsigned short )
126  PARSERS_DECL_FOR_SINGLE( unsigned int )
130  PARSERS_DECL_FOR_SINGLE( unsigned long )
132  PARSERS_DECL_FOR_SINGLE( long long )
134  PARSERS_DECL_FOR_SINGLE( unsigned long long )
135  // ========================================================================
147  PARSERS_DECL_FOR_SINGLE( double )
149  PARSERS_DECL_FOR_SINGLE( float )
151  PARSERS_DECL_FOR_SINGLE( long double )
152  // ========================================================================
165  // ========================================================================
166 
167  PARSERS_DECL_FOR_LIST( bool )
168  PARSERS_DECL_FOR_LIST( char )
169  PARSERS_DECL_FOR_LIST( unsigned char )
170  PARSERS_DECL_FOR_LIST( signed char )
171 
172  PARSERS_DECL_FOR_LIST( int )
173  PARSERS_DECL_FOR_LIST( short )
174  PARSERS_DECL_FOR_LIST( unsigned short )
175  PARSERS_DECL_FOR_LIST( unsigned int )
176  PARSERS_DECL_FOR_LIST( long )
177  PARSERS_DECL_FOR_LIST( unsigned long )
178  PARSERS_DECL_FOR_LIST( long long )
179  PARSERS_DECL_FOR_LIST( unsigned long long )
180 
181  PARSERS_DECL_FOR_LIST( double )
182  PARSERS_DECL_FOR_LIST( float )
183  PARSERS_DECL_FOR_LIST( long double )
184 
186 
187  // ========================================================================
188 
189  PARSERS_DECL_FOR_SET( bool )
190  PARSERS_DECL_FOR_SET( char )
191  PARSERS_DECL_FOR_SET( unsigned char )
192  PARSERS_DECL_FOR_SET( signed char )
193 
194  PARSERS_DECL_FOR_SET( int )
195  PARSERS_DECL_FOR_SET( short )
196  PARSERS_DECL_FOR_SET( unsigned short )
197  PARSERS_DECL_FOR_SET( unsigned int )
198  PARSERS_DECL_FOR_SET( long )
199  PARSERS_DECL_FOR_SET( unsigned long )
200  PARSERS_DECL_FOR_SET( long long )
201  PARSERS_DECL_FOR_SET( unsigned long long )
202 
203  PARSERS_DECL_FOR_SET( double )
204  PARSERS_DECL_FOR_SET( float )
205  PARSERS_DECL_FOR_SET( long double )
206 
208 
209  // ========================================================================
210  // Advanced parses
211  // ========================================================================
224  PARSERS_DECL_FOR_PAIR( double, double )
225  // ========================================================================
238  PARSERS_DECL_FOR_PAIR( int, int )
239  // ========================================================================
253  GAUDI_API StatusCode parse( std::vector<std::pair<double, double>>& result, std::string_view input );
254  // ========================================================================
268  GAUDI_API StatusCode parse( std::vector<std::pair<int, int>>& result, std::string_view input );
269  // ========================================================================
270  // vector< vector< TYPE > >
271  // ========================================================================
284  GAUDI_API StatusCode parse( std::vector<std::vector<std::string>>& result, std::string_view input );
285  // ========================================================================
298  GAUDI_API StatusCode parse( std::vector<std::vector<double>>& result, std::string_view input );
299  // ========================================================================
308  GAUDI_API StatusCode parse( std::vector<std::vector<int>>& result, std::string_view input );
309  // ========================================================================
310  // map< TYPE, TYPE >
311  // ========================================================================
324  GAUDI_API StatusCode parse( std::map<int, int>& result, std::string_view input );
325  // ========================================================================
339  GAUDI_API StatusCode parse( std::map<int, double>& result, std::string_view input );
340  // ========================================================================
353  GAUDI_API StatusCode parse( std::map<std::string, std::string>& result, std::string_view input );
354  GAUDI_API StatusCode parse( std::map<std::string, std::string, std::less<>>& result, std::string_view input );
355  // ========================================================================
369  GAUDI_API StatusCode parse( std::map<std::string, int>& result, std::string_view input );
370  // ========================================================================
384  GAUDI_API StatusCode parse( std::map<std::string, double>& result, std::string_view input );
385  // ========================================================================
401  GAUDI_API StatusCode parse( std::map<std::string, std::vector<std::string>>& result, std::string_view input );
402  // ========================================================================
418  GAUDI_API StatusCode parse( std::map<std::string, std::vector<int>>& result, std::string_view input );
419  // ========================================================================
435  GAUDI_API StatusCode parse( std::map<std::string, std::vector<double>>& result, std::string_view input );
436  // ========================================================================
444  GAUDI_API StatusCode parse( std::map<int, std::string>& result, std::string_view input );
445  // ========================================================================
453  GAUDI_API StatusCode parse( std::map<unsigned int, std::string>& result, std::string_view input );
454  // ========================================================================
459  GAUDI_API StatusCode parse( std::map<std::string, unsigned int>& result, std::string_view input );
460  // ========================================================================
465  template <typename K, typename V, typename M>
466  GAUDI_API StatusCode parse( GaudiUtils::Map<K, V, M>& result, std::string_view input ) {
467  return parse( (M&)result, input );
468  }
469  // ========================================================================
496  GAUDI_API StatusCode parse( std::string& name, std::string& value, std::string_view input );
497  // ========================================================================
506  GAUDI_API StatusCode parse( Gaudi::Histo1DDef& histo, std::string_view input );
507  // ========================================================================
517  // ========================================================================
526  GAUDI_API StatusCode parse( std::map<std::string, std::pair<double, double>>& params, std::string_view input );
527  // ========================================================================
537  GAUDI_API StatusCode parse( std::map<std::string, std::pair<int, int>>& params, std::string_view input );
538  // ========================================================================
546  template <class T, unsigned int N>
547  StatusCode parse( T ( &result )[N], std::string_view input ) {
548  typedef std::vector<T> _Vct;
549  // create the temporary vector
550  _Vct tmp;
551  StatusCode sc = parse( tmp, input );
552  if ( sc.isFailure() ) { return sc; } // RETURN
553  if ( N != tmp.size() ) { return StatusCode::FAILURE; } // RETURN
554  //
555  std::copy( tmp.begin(), tmp.end(), result );
556  //
557  return StatusCode::SUCCESS; // RETURN
558  }
559  // ========================================================================
567  template <unsigned int N>
568  StatusCode parse( char ( &result )[N], std::string_view input ) {
569  // clear the string
570  std::fill_n( result, N, ' ' );
571  // create the temporary string
572  std::string tmp;
573  StatusCode sc = parse( tmp, input );
574  if ( sc.isFailure() ) { return sc; } // RETURN
575  if ( N == tmp.size() ) {
576  std::copy( tmp.begin(), tmp.end(), result );
577  } else if ( N + 2 == tmp.size() && ( '\'' == tmp[0] || '\"' == tmp[0] ) && ( tmp[0] == tmp[tmp.size() - 1] ) ) {
578  std::copy( tmp.begin() + 1, tmp.end() - 1, result );
579  } else {
580  return StatusCode::FAILURE;
581  }
582  //
583  return StatusCode::SUCCESS; // RETURN
584  }
585  // ========================================================================
586  } // namespace Parsers
587  // ==========================================================================
588 } // end of namespace Gaudi
PARSERS_DECL_FOR_LIST
#define PARSERS_DECL_FOR_LIST(InnerType)
Definition: CommonParsers.h:34
std::string
STL class.
IOTest.N
N
Definition: IOTest.py:112
std::pair< double, double >
Gaudi::Parsers::parse
StatusCode parse(GaudiUtils::HashMap< K, V > &result, std::string_view input)
Basic parser for the types of HashMap used in DODBasicMapper.
Definition: DODBasicMapper.cpp:21
std::vector
STL class.
std::string::size
T size(T... args)
std::less
StatusCode.h
PARSERS_DECL_FOR_SINGLE
#define PARSERS_DECL_FOR_SINGLE(Type)
Definition: CommonParsers.h:29
HistoDef.h
Gaudi::Histo1DDef
Definition: HistoDef.h:41
StatusCode
Definition: StatusCode.h:65
GaudiUtils::Map
Definition: Map.h:91
std::copy
T copy(T... args)
std::map< int, int >
Gaudi
This file provides a Grammar for the type Gaudi::Accumulators::Axis It allows to use that type from p...
Definition: __init__.py:1
StatusCode::isFailure
bool isFailure() const
Definition: StatusCode.h:129
StatusCode::SUCCESS
constexpr static const auto SUCCESS
Definition: StatusCode.h:100
ConditionsStallTest.name
name
Definition: ConditionsStallTest.py:77
compareRootHistos.histos
histos
Definition: compareRootHistos.py:26
std::string::begin
T begin(T... args)
PARSERS_DECL_FOR_PAIR
#define PARSERS_DECL_FOR_PAIR(FirstType, SecondType)
Definition: CommonParsers.h:31
PARSERS_DECL_FOR_SET
#define PARSERS_DECL_FOR_SET(InnerType)
Definition: CommonParsers.h:37
std::string::end
T end(T... args)
Map.h
StatusCode::FAILURE
constexpr static const auto FAILURE
Definition: StatusCode.h:101
std::fill_n
T fill_n(T... args)
GAUDI_API
#define GAUDI_API
Definition: Kernel.h:81