]> git.tdb.fi Git - libs/datafile.git/blob - source/parsermode.h
Cosmetic changes
[libs/datafile.git] / source / parsermode.h
1 #ifndef MSP_DATAFILE_PARSERMODE_H_
2 #define MSP_DATAFILE_PARSERMODE_H_
3
4 #include <msp/core/noncopyable.h>
5 #include "statement.h"
6
7 namespace Msp {
8 namespace DataFile {
9
10 class Input;
11 class Loader;
12 class LoaderAction;
13
14 /**
15 Base class for parse modes.
16 */
17 class ParserMode: private NonCopyable
18 {
19 protected:
20         Input &in;
21         const std::string &src;
22
23         ParserMode(Input &i, const std::string &s): in(i), src(s) { }
24 public:
25         virtual ~ParserMode() = default;
26
27         virtual Statement parse() = 0;
28         virtual void process_control_statement(const Statement &) { }
29
30         virtual const StatementKey *peek(unsigned) { return nullptr; }
31         virtual bool parse_and_load(unsigned, Loader &, const LoaderAction &) { return false; }
32 };
33
34 } // namespace DataFile
35 } // namespace Msp
36
37 #endif