]> git.tdb.fi Git - libs/datafile.git/commitdiff
Add Loader::get_source
authorMikko Rasa <tdb@tdb.fi>
Sat, 22 Sep 2007 17:04:16 +0000 (17:04 +0000)
committerMikko Rasa <tdb@tdb.fi>
Sat, 22 Sep 2007 17:04:16 +0000 (17:04 +0000)
Add a version of the two-parameter load_sub function that determines the loader class automatically

source/loader.h

index 9c0933694e074389a5931f3af8a5e2fc029ca6f7..e1522de11aaa8be8dbcba9d40f74c669cbf373d6 100644 (file)
@@ -255,8 +255,8 @@ protected:
        { actions.insert(ActionMap::value_type(k, 0)); }
 
        /**
-       Loads a sub-object from the statement being currently processed.  The Loader
-       class of the sub-object is automatically used.
+       Loads a sub-object from the statement being processed.  The Loader class of
+       the sub-object is automatically used.
        */
        template<typename S>
        void load_sub(S &s)
@@ -274,6 +274,10 @@ protected:
                loader.load(*cur_st);
        }
 
+       template<typename S, typename T>
+       void load_sub(S &s, T &p)
+       { load_sub<typename S::Loader, S, T>(s, p); }
+
        /**
        Loads a sub-object with a custom Loader class that takes one argument in
        addition to to object to be loaded.
@@ -286,6 +290,18 @@ protected:
                L loader(s, p);
                loader.load(*cur_st);
        }
+
+       /**
+       Returns the source of the statement being processed.  This can be used to
+       implement relative paths in include-like statements.  Note that the source
+       may not necessarily be a file.
+       */
+       const std::string &get_source() const
+       {
+               if(!cur_st)
+                       throw InvalidState("get_source called without current statement");
+               return cur_st->source;
+       }
 private:
        typedef std::map<std::string, LoaderAction *> ActionMap;