X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=source%2Fparser.h;h=243db1feb5fd186aa8eda14e93ad9a71bc5f113c;hb=3b78eeb8b92dc3524d6a0456b4daf0a0f3dbf813;hp=0989bd9d2d1fe378920c469c845f71435d799b28;hpb=a82776d980239e48d2b509d33b56e77a1ea44dda;p=libs%2Fdatafile.git diff --git a/source/parser.h b/source/parser.h index 0989bd9..243db1f 100644 --- a/source/parser.h +++ b/source/parser.h @@ -7,8 +7,11 @@ namespace Msp { namespace DataFile { +class Loader; +class LoaderAction; class ParserMode; class Statement; +class StatementKey; /** Frontend for loading datafiles. Handles switching between text and binary @@ -28,18 +31,25 @@ public: Parser(IO::Base &i, const std::string &s); ~Parser(); - /** - Reads a statement from the input. If the end of input was reached, an empty - invalid statement will be returned. If an error occurs, the parser will be - marked as bad and no more statements may be read, even if the exception was - caught. - */ + /** Reads a statement from the input. If the end of input was reached, an + empty invalid statement will be returned. If an error occurs, the parser + will be marked as bad and no more statements may be read, even if the + exception was caught. */ Statement parse(bool raw = false); private: void process_control_statement(const Statement &); public: + /** Returns a key for the next statement, consisting of its keyword and + signature. Not supported in all modes. */ + const StatementKey *peek(unsigned); + + /** Parses a statement and feeds its arguments to an action. The action + must be appropriate for the statement. Use peek() to determine the + statement's signature. */ + bool parse_and_load(unsigned, Loader &, const LoaderAction &); + operator bool() const { return good && in; } };