From 48cf7ebe5d41acaf3013356c92d195858cf94b5e Mon Sep 17 00:00:00 2001 From: Philipp Date: Wed, 2 Jun 2021 16:19:06 +0200 Subject: [PATCH] try singleton --- co_sim_io/impl/co_sim_io_impl.hpp | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/co_sim_io/impl/co_sim_io_impl.hpp b/co_sim_io/impl/co_sim_io_impl.hpp index bf9b9b9c..fbf75b57 100644 --- a/co_sim_io/impl/co_sim_io_impl.hpp +++ b/co_sim_io/impl/co_sim_io_impl.hpp @@ -30,6 +30,19 @@ namespace CoSimIO { namespace Internals { +template +class Singleton +{ +public: + static T& getInstance() + { + static T instance; + return instance; + } +}; + +using maptype = std::unordered_map>; + // this function makes sure that the registry works correctly also across translation units / libraries inline std::unordered_map>& GetRegistry() { @@ -39,13 +52,13 @@ inline std::unordered_map>& GetRegistry static bool HasIO(const std::string& rConnectionName) { - return GetRegistry().find(rConnectionName) != GetRegistry().end(); + return Singleton::getInstance().find(rConnectionName) != Singleton::getInstance().end(); } static Connection& GetConnection(const std::string& rConnectionName) { CO_SIM_IO_ERROR_IF_NOT(HasIO(rConnectionName)) << "Trying to use connection \"" << rConnectionName << "\" which does not exist!" << std::endl; - return *GetRegistry().at(rConnectionName); + return *Singleton::getInstance().at(rConnectionName); } } // namespace Internals @@ -86,7 +99,7 @@ inline Info Connect(const Info& I_Settings) CO_SIM_IO_ERROR_IF(HasIO(connection_name)) << "A connection from \"" << my_name << "\" to \"" << connect_to << "\"already exists!" << std::endl; - GetRegistry()[connection_name] = std::unique_ptr(new Connection(I_Settings)); + Singleton::getInstance()[connection_name] = std::unique_ptr(new Connection(I_Settings)); auto info = GetConnection(connection_name).Connect(I_Settings); info.Set("connection_name", connection_name); @@ -101,7 +114,7 @@ inline Info Disconnect(const Info& I_Info) CO_SIM_IO_ERROR_IF_NOT(HasIO(connection_name)) << "Trying to disconnect connection \"" << connection_name << "\" which does not exist!" << std::endl; auto info = GetConnection(connection_name).Disconnect(I_Info); - GetRegistry().erase(connection_name); + Singleton::getInstance().erase(connection_name); return info; }