]> git.tdb.fi Git - libs/datafile.git/commitdiff
Make Loader::ActionMap delete the actions
authorMikko Rasa <tdb@tdb.fi>
Sun, 17 Jan 2021 10:50:10 +0000 (12:50 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sun, 17 Jan 2021 10:51:37 +0000 (12:51 +0200)
This ensures actions in shared action maps are deleted as well

source/loader.cpp
source/loader.h

index 6a4a8d845dee3642a9091d31fc847f067937b4e9..960621cf3b47c48fcef8d5e016c5bb210b4f31eb 100644 (file)
@@ -54,12 +54,6 @@ Loader::Loader():
        check_sub_loads(false)
 { }
 
-Loader::~Loader()
-{
-       for(ActionMap::iterator i=local_actions.begin(); i!=local_actions.end(); ++i)
-               delete i->second;
-}
-
 void Loader::load(Parser &p)
 {
        if(!actions)
@@ -249,5 +243,12 @@ const string &Loader::get_keyword() const
        return cur_st->keyword;
 }
 
+
+Loader::ActionMap::~ActionMap()
+{
+       for(iterator i=begin(); i!=end(); ++i)
+               delete i->second;
+}
+
 } // namespace DataFile
 } // namespace Msp
index 9736d269d90ffdde9e83ea7a835032cad98ebd16..fe8f0aa54f7621939b1bc2cba946f0f10ca58d0d 100644 (file)
@@ -36,7 +36,11 @@ See also classes ObjectLoader and CollectionObjectLoader in objectloader.h.
 class Loader: private NonCopyable
 {
 protected:
-       typedef std::map<StatementKey, LoaderAction *> ActionMap;
+       class ActionMap: public std::map<StatementKey, LoaderAction *>, private NonCopyable
+       {
+       public:
+               ~ActionMap();
+       };
 
 private:
        ActionMap local_actions;
@@ -52,7 +56,7 @@ protected:
 
        Loader();
 public:
-       virtual ~Loader();
+       virtual ~Loader() { }
 
        /** Loads statements from a parser. */
        void load(Parser &p);