diff --git a/core/auto4_base.cpp b/core/auto4_base.cpp index 53dcc7367..a39ce7582 100644 --- a/core/auto4_base.cpp +++ b/core/auto4_base.cpp @@ -643,7 +643,7 @@ namespace Automation4 { // ScriptFactory - std::vector ScriptFactory::factories; + std::vector *ScriptFactory::factories = 0; const wxString& ScriptFactory::GetEngineName() const { @@ -657,19 +657,25 @@ namespace Automation4 { void ScriptFactory::Register(ScriptFactory *factory) { - for (std::vector::iterator i = factories.begin(); i != factories.end(); ++i) { + if (!factories) + factories = new std::vector(); + + for (std::vector::iterator i = factories->begin(); i != factories->end(); ++i) { if (*i == factory) { throw _T("Automation 4: Attempt to register the same script factory multiple times."); } } - factories.push_back(factory); + factories->push_back(factory); } void ScriptFactory::Unregister(ScriptFactory *factory) { - for (std::vector::iterator i = factories.begin(); i != factories.end(); ++i) { + if (!factories) + factories = new std::vector(); + + for (std::vector::iterator i = factories->begin(); i != factories->end(); ++i) { if (*i == factory) { - factories.erase(i); + factories->erase(i); return; } } @@ -677,7 +683,10 @@ namespace Automation4 { Script* ScriptFactory::CreateFromFile(const wxString &filename) { - for (std::vector::iterator i = factories.begin(); i != factories.end(); ++i) { + if (!factories) + factories = new std::vector(); + + for (std::vector::iterator i = factories->begin(); i != factories->end(); ++i) { Script *s = (*i)->Produce(filename); if (s) return s; } @@ -686,7 +695,10 @@ namespace Automation4 { const std::vector& ScriptFactory::GetFactories() { - return factories; + if (!factories) + factories = new std::vector(); + + return *factories; } diff --git a/core/auto4_base.h b/core/auto4_base.h index a2fb67a1d..bf0751d9c 100644 --- a/core/auto4_base.h +++ b/core/auto4_base.h @@ -335,7 +335,7 @@ namespace Automation4 { // This is used to create Script objects from a file. class ScriptFactory { private: - static std::vector factories; + static std::vector *factories; protected: ScriptFactory() { } wxString engine_name;