Luiza  v03-01
Parser.h
1 #ifndef Parser_h
2 #define Parser_h 1
3 
4 //#include "lcio.h"
5 #include "IParser.h"
6 #include "StringParameters.h"
7 #include "LuizaExceptions.h"
8 
9 #include <fstream>
10 #include <string>
11 #include <iostream>
12 
13 namespace luiza{
14 
15 class LCTokenizer ;
16 
17 
18 typedef std::map< std::string , StringParameters* > StringParametersMap ;
19 
20 
36 class Parser : public IParser {
37 
38 
39 public:
40 
41 
42  // Parser(const std::string[] & namespaces ) ;
43  // void parse( const std::string& fileName )
44 
45  Parser( const std::string& fileName ) ;
46  virtual ~Parser() ;
47 
48  StringParameters* getParameters( const std::string& sectionName ) const ;
49 
51  void setCmdLineParameters( const CommandLineParametersMap & cmdlineparams ){
52  if(cmdlineparams.size()>0)
53  throw ParseException( "dynamic command line options only supported for xml steering files" ) ;
54  }
55 
56 
59  void parse() ;
60 
61 
62 protected:
63 
67  int readNextValidLine( std::string& str , std::istream& stream) ;
68 
69 
70  mutable StringParametersMap _map ;
71  StringParameters* _current ;
72 
73  std::string _fileName ;
74 
75 private:
76  Parser() ;
77 
78 };
79 
80 
81 
82 
83 
87 
88  std::vector< std::string >& _tokens ;
89  char _del ;
90  char _last ;
91  public:
92 
93  LCTokenizer( std::vector< std::string >& tokens, char del ) : _tokens(tokens) , _del(del), _last(del) {
94  }
95 
96 
97  void operator()(const char& c) {
98 
99  if( c != _del ) {
100 
101  if( _last == _del ) {
102  _tokens.push_back("") ;
103  }
104  _tokens.back() += c ;
105  result() ;
106  }
107  _last = c ;
108 
109  }
110 
111  ~LCTokenizer(){
112  }
113 
114  std::vector<std::string> & result() {
115 
116  return _tokens ;
117 
118  }
119 };
120 
121 
122 } // end namespace marlin
123 #endif
Definition: IParser.h:18
void setCmdLineParameters(const CommandLineParametersMap &cmdlineparams)
Definition: Parser.h:51
int readNextValidLine(std::string &str, std::istream &stream)
Definition: Parser.cc:132
void parse()
Definition: Parser.cc:16
Definition: Parser.h:36
ParseException used for parse errors, e.g. when reading the steering file.
Definition: LuizaExceptions.h:15
Definition: Parser.h:86
Namespace for Luiza framework.
Definition: CCCollection.h:6
StringParameters * getParameters(const std::string &sectionName) const
Definition: Parser.cc:113