From bb4fca593b0e7a74f1f271d98c404cd4bf6b5bae Mon Sep 17 00:00:00 2001 From: Alexander Bock Date: Mon, 6 Mar 2017 15:06:54 -0500 Subject: [PATCH] Automatically register core classes on first access to DocumentationEngine --- include/openspace/documentation/documentationengine.h | 2 ++ src/documentation/documentationengine.cpp | 10 ++++++++-- src/engine/openspaceengine.cpp | 2 -- 3 files changed, 10 insertions(+), 4 deletions(-) diff --git a/include/openspace/documentation/documentationengine.h b/include/openspace/documentation/documentationengine.h index 4841c3efc4..41400602fb 100644 --- a/include/openspace/documentation/documentationengine.h +++ b/include/openspace/documentation/documentationengine.h @@ -92,6 +92,8 @@ public: private: /// The list of all Documentation%s that are stored by the DocumentationEngine std::vector _documentations; + + static DocumentationEngine* _instance; }; } // namespace documentation diff --git a/src/documentation/documentationengine.cpp b/src/documentation/documentationengine.cpp index 2f90737a73..2f48183dd1 100644 --- a/src/documentation/documentationengine.cpp +++ b/src/documentation/documentationengine.cpp @@ -25,6 +25,7 @@ #include #include +#include #include #include @@ -48,6 +49,8 @@ namespace { namespace openspace { namespace documentation { +DocumentationEngine* DocumentationEngine::_instance = nullptr; + DocumentationEngine::DuplicateDocumentationException::DuplicateDocumentationException( Documentation documentation) : ghoul::RuntimeError(fmt::format( @@ -59,8 +62,11 @@ DocumentationEngine::DuplicateDocumentationException::DuplicateDocumentationExce {} DocumentationEngine& DocumentationEngine::ref() { - static DocumentationEngine engine; - return engine; + if (_instance == nullptr) { + _instance = new DocumentationEngine; + registerCoreClasses(*_instance); + } + return *_instance; } std::string generateTextDocumentation(const Documentation& d, int& indentLevel) { diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index e911816cec..32389d5649 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -229,8 +229,6 @@ void OpenSpaceEngine::create(int argc, char** argv, LDEBUG("Creating OpenSpaceEngine"); _engine = new OpenSpaceEngine(std::string(argv[0]), std::move(windowWrapper)); - registerCoreClasses(DocEng); - // Query modules for commandline arguments _engine->gatherCommandlineArguments();