From cf7458caaf3048582d93a013d830ef316d0cc9d7 Mon Sep 17 00:00:00 2001 From: Relintai Date: Sat, 5 Feb 2022 18:26:32 +0100 Subject: [PATCH] Now the RCPPFramework singleton will allocate the DatabaseManager if databases are enabled by default. --- rcpp_framework.cpp | 12 ++++++++++++ rcpp_framework.h | 46 +++++++++++++++++++++++++--------------------- 2 files changed, 37 insertions(+), 21 deletions(-) diff --git a/rcpp_framework.cpp b/rcpp_framework.cpp index 404513b..299a232 100644 --- a/rcpp_framework.cpp +++ b/rcpp_framework.cpp @@ -3,6 +3,7 @@ #include "core/error_macros.h" #if DATABASES_ENABLED +#include "database/database_manager.h" #include "database_backends/db_init.h" #endif @@ -64,6 +65,10 @@ RCPPFramework::RCPPFramework() { _instance = this; _initialized = false; + +#if DATABASES_ENABLED + allocate_database_manager_singleton = true; +#endif } RCPPFramework::~RCPPFramework() { @@ -91,6 +96,13 @@ void RCPPFramework::_do_initialize() { backend_hash_hashlib_install_providers(); PlatformInitializer::allocate_all(); + +#if DATABASES_ENABLED + if (allocate_database_manager_singleton) { + DatabaseManager *dbm = new DatabaseManager(); + manage_object(dbm); + } +#endif } void RCPPFramework::_do_uninitialize() { diff --git a/rcpp_framework.h b/rcpp_framework.h index a502d85..a43f3b4 100644 --- a/rcpp_framework.h +++ b/rcpp_framework.h @@ -1,44 +1,48 @@ #ifndef RCPP_FRAMEWORK_H #define RCPP_FRAMEWORK_H -#include "core/string.h" #include "core/containers/vector.h" +#include "core/string.h" #include "core/object.h" class RCPPFramework : Object { - RCPP_OBJECT(RCPPFramework, Object); + RCPP_OBJECT(RCPPFramework, Object); public: - // Helper methods to allocate and destroy the singleton. - // Note that creating / deleting an instance manually in your app will also work. - static void create(); - static void destroy(); - //Usie these if you don't want to mess with the default settings. - static void create_and_init(); - static void create_and_init(int argc, char **argv, char **envp); + // Helper methods to allocate and destroy the singleton. + // Note that creating / deleting an instance manually in your app will also work. + static void create(); + static void destroy(); + // Usie these if you don't want to mess with the default settings. + static void create_and_init(); + static void create_and_init(int argc, char **argv, char **envp); - void initialize(); - void uninitialize(); + void initialize(); + void uninitialize(); - void setup_args(int argc, char **argv, char **envp); + void setup_args(int argc, char **argv, char **envp); - void manage_object(Object* obj); + void manage_object(Object *obj); - RCPPFramework(); - ~RCPPFramework(); + RCPPFramework(); + ~RCPPFramework(); - static RCPPFramework *get_singleton(); + static RCPPFramework *get_singleton(); + +#if DATABASES_ENABLED + bool allocate_database_manager_singleton; +#endif protected: - virtual void _do_initialize(); - virtual void _do_uninitialize(); + virtual void _do_initialize(); + virtual void _do_uninitialize(); - bool _initialized; + bool _initialized; - Vector _managed_objects; + Vector _managed_objects; - static RCPPFramework *_instance; + static RCPPFramework *_instance; }; #endif \ No newline at end of file