Introduce Registry::GetInstance() to deduplicate such methods

in derived classes and inline them, as side effect, to speed up calls.
This commit is contained in:
Alexander A. Klimov 2024-11-08 12:43:08 +01:00
parent 6af2f9bd19
commit e0911991e7
9 changed files with 6 additions and 32 deletions

View File

@ -7,6 +7,7 @@
#include "base/atomic.hpp"
#include "base/exception.hpp"
#include "base/string.hpp"
#include "base/singleton.hpp"
#include <shared_mutex>
#include <stdexcept>
#include <unordered_map>
@ -26,6 +27,11 @@ class Registry
public:
typedef std::unordered_map<String, T> ItemMap;
static Registry* GetInstance()
{
return Singleton<Registry>::GetInstance();
}
void Register(const String& name, const T& item)
{
std::unique_lock lock (m_Mutex);

View File

@ -133,8 +133,3 @@ std::set<DbType::Ptr> DbType::GetAllTypes()
return result;
}
DbTypeRegistry *DbTypeRegistry::GetInstance()
{
return Singleton<DbTypeRegistry>::GetInstance();
}

View File

@ -6,7 +6,6 @@
#include "db_ido/i2-db_ido.hpp"
#include "base/object.hpp"
#include "base/registry.hpp"
#include "base/singleton.hpp"
#include <set>
namespace icinga
@ -64,8 +63,6 @@ private:
*/
class DbTypeRegistry : public Registry<DbTypeRegistry, DbType::Ptr>
{
public:
static DbTypeRegistry *GetInstance();
};
/**

View File

@ -1,7 +1,6 @@
/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
#include "remote/apiaction.hpp"
#include "base/singleton.hpp"
using namespace icinga;
@ -28,8 +27,3 @@ void ApiAction::Register(const String& name, const ApiAction::Ptr& action)
{
ApiActionRegistry::GetInstance()->Register(name, action);
}
ApiActionRegistry *ApiActionRegistry::GetInstance()
{
return Singleton<ApiActionRegistry>::GetInstance();
}

View File

@ -47,8 +47,6 @@ private:
*/
class ApiActionRegistry : public Registry<ApiActionRegistry, ApiAction::Ptr>
{
public:
static ApiActionRegistry *GetInstance();
};
#define REGISTER_APIACTION(name, types, callback) \

View File

@ -1,7 +1,6 @@
/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
#include "remote/apifunction.hpp"
#include "base/singleton.hpp"
using namespace icinga;
@ -23,8 +22,3 @@ void ApiFunction::Register(const String& name, const ApiFunction::Ptr& function)
{
ApiFunctionRegistry::GetInstance()->Register(name, function);
}
ApiFunctionRegistry *ApiFunctionRegistry::GetInstance()
{
return Singleton<ApiFunctionRegistry>::GetInstance();
}

View File

@ -43,8 +43,6 @@ private:
*/
class ApiFunctionRegistry : public Registry<ApiFunctionRegistry, ApiFunction::Ptr>
{
public:
static ApiFunctionRegistry *GetInstance();
};
#define REGISTER_APIFUNCTION(name, ns, callback) \

View File

@ -4,7 +4,6 @@
#include "remote/eventqueue.hpp"
#include "remote/filterutility.hpp"
#include "base/io-engine.hpp"
#include "base/singleton.hpp"
#include "base/logger.hpp"
#include "base/utility.hpp"
#include <boost/asio/spawn.hpp>
@ -127,11 +126,6 @@ void EventQueue::Register(const String& name, const EventQueue::Ptr& function)
EventQueueRegistry::GetInstance()->Register(name, function);
}
EventQueueRegistry *EventQueueRegistry::GetInstance()
{
return Singleton<EventQueueRegistry>::GetInstance();
}
std::mutex EventsInbox::m_FiltersMutex;
std::map<String, EventsInbox::Filter> EventsInbox::m_Filters ({{"", EventsInbox::Filter{1, Expression::Ptr()}}});

View File

@ -61,8 +61,6 @@ private:
*/
class EventQueueRegistry : public Registry<EventQueueRegistry, EventQueue::Ptr>
{
public:
static EventQueueRegistry *GetInstance();
};
enum class EventType : uint_fast8_t