X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Floader.cpp;h=67668cdea1f5bc52b76c7c02c401fda501d9531e;hb=a02c84384a101c0dec48b6aa2dee53bac4bbd034;hp=cf1a5acae89dc0e4abe7583358e3926ab629277c;hpb=de02b5618273df1b94085934f699371b4be31783;p=libs%2Fdatafile.git diff --git a/source/loader.cpp b/source/loader.cpp index cf1a5ac..67668cd 100644 --- a/source/loader.cpp +++ b/source/loader.cpp @@ -34,12 +34,24 @@ Loader::~Loader() delete i->second; } +void Loader::add(const string &k, LoaderAction *a) +{ + ActionMap::iterator i=actions.find(k); + if(i!=actions.end()) + { + delete i->second; + i->second=a; + } + else + actions[k]=a; +} + void Loader::load_statement(const Statement &st) { cur_st=&st; ActionMap::iterator j=actions.find(st.keyword); if(j==actions.end()) - throw KeyError(st.get_location()+": Unknown keyword '"+st.keyword+"'"); + throw KeyError(st.get_location()+": Unknown keyword", st.keyword); if(j->second) j->second->execute(*this, st); cur_st=0;