X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Floader.h;h=8a1103d11f14d4c251033a20a1189a2a886599e8;hb=b39ce68f12c30eedb272b65fe78baec5864d89ca;hp=3ab6d28fcfd194b2029588a03383ddf53adc7194;hpb=9763e39e6e09e747b87940920e778ac269dd8b15;p=libs%2Fdatafile.git diff --git a/source/loader.h b/source/loader.h index 3ab6d28..8a1103d 100644 --- a/source/loader.h +++ b/source/loader.h @@ -35,21 +35,14 @@ See also classes ObjectLoader and CollectionObjectLoader in objectloader.h. class Loader { private: - struct ActionKey - { - std::string keyword; - std::string signature; - - ActionKey(const std::string &, const std::string &); - - bool operator<(const ActionKey &) const; - }; - - typedef std::map ActionMap; + typedef std::map ActionMap; ActionMap actions; + Parser *cur_parser; + unsigned cur_level; const Statement *cur_st; bool sub_loaded; + bool direct; std::list aux_loaders; protected: bool check_sub_loads; @@ -65,6 +58,9 @@ private: /** Loads data from a statement. */ void load(const Statement &st); + /** Loads statemsnts from a parser, feeding them directly to actions. */ + void load_direct(Parser &, unsigned); + /** Processes a single statement */ void load_statement(const Statement &st); @@ -136,8 +132,8 @@ protected: void add_auxiliary_loader(Loader &); private: - bool has_keyword(const std::string &) const; - LoaderAction *find_action(const ActionKey &) const; + bool has_action(const StatementKey &) const; + LoaderAction *find_action(const StatementKey &) const; protected: /** Returns the source of the statement being processed. This can be used