]> git.tdb.fi Git - libs/datafile.git/blobdiff - source/loader.cpp
More flexible framework for loading substatements with custom loaders
[libs/datafile.git] / source / loader.cpp
index 67668cdea1f5bc52b76c7c02c401fda501d9531e..e4993868ab3adfac95c385ef7c5d9e6a3c638a1c 100644 (file)
@@ -16,6 +16,7 @@ void Loader::load(const Statement &st)
 {
        for(list<Statement>::const_iterator i=st.sub.begin(); i!=st.sub.end(); ++i)
                load_statement(*i);
+       finish();
 }
 
 void Loader::load(Parser &p)
@@ -26,6 +27,7 @@ void Loader::load(Parser &p)
                if(st.valid)
                        load_statement(st);
        }
+       finish();
 }
 
 Loader::~Loader()
@@ -34,6 +36,14 @@ Loader::~Loader()
                delete i->second;
 }
 
+void Loader::load_sub_with(Loader &ldr)
+{
+       if(!cur_st)
+               throw InvalidState("load_sub called without current statement");
+
+       ldr.load(*cur_st);
+}
+
 void Loader::add(const string &k, LoaderAction *a)
 {
        ActionMap::iterator i=actions.find(k);