Improve compatibility with -fvisibility=hidden.

Refs 
This commit is contained in:
Gunnar Beutner 2013-11-30 17:47:53 +01:00 committed by Gunnar Beutner
parent f05858d3ad
commit 553bd3246b
11 changed files with 65 additions and 32 deletions

View File

@ -36,7 +36,7 @@ inline bool InitializeOnceHelper(InitializeFunc func)
#define INITIALIZE_ONCE(func) \
namespace { \
I2_EXPORT bool l_InitializeOnce(InitializeOnceHelper(func)); \
I2_EXPORT bool l_InitializeOnce(icinga::InitializeOnceHelper(func)); \
}
}

View File

@ -21,7 +21,6 @@
#define REGISTRY_H
#include "base/i2-base.h"
#include "base/singleton.h"
#include "base/qstring.h"
#include <map>
#include <boost/thread/mutex.hpp>
@ -42,11 +41,6 @@ class Registry
public:
typedef std::map<String, T> ItemMap;
static Registry<U, T> *GetInstance(void)
{
return Singleton<Registry<U, T> >::GetInstance();
}
void RegisterIfNew(const String& name, const T& item)
{
boost::mutex::scoped_lock lock(m_Mutex);

View File

@ -19,6 +19,7 @@
#include "base/scriptfunction.h"
#include "base/registry.h"
#include "base/singleton.h"
using namespace icinga;
@ -36,3 +37,9 @@ RegisterFunctionHelper::RegisterFunctionHelper(const String& name, const ScriptF
ScriptFunction::Ptr func = make_shared<ScriptFunction>(function);
ScriptFunctionRegistry::GetInstance()->Register(name, func);
}
ScriptFunctionRegistry *ScriptFunctionRegistry::GetInstance(void)
{
return Singleton<ScriptFunctionRegistry>::GetInstance();
}

View File

@ -22,6 +22,7 @@
#include "base/i2-base.h"
#include "base/registry.h"
#include "base/singleton.h"
#include "base/value.h"
#include "base/scriptfunctionwrapper.h"
#include <vector>
@ -56,7 +57,10 @@ private:
* @ingroup base
*/
class I2_BASE_API ScriptFunctionRegistry : public Registry<ScriptFunctionRegistry, ScriptFunction::Ptr>
{ };
{
public:
static ScriptFunctionRegistry *GetInstance(void);
};
/**
* Helper class for registering ScriptFunction implementation classes.

View File

@ -22,11 +22,9 @@
using namespace icinga;
Registry<ScriptVariable, Value> ScriptVariable::m_Registry;
Value ScriptVariable::Get(const String& name)
{
Value value = m_Registry.GetItem(name);
Value value = ScriptVariableRegistry::GetInstance()->GetItem(name);
if (value.IsEmpty())
Log(LogWarning, "icinga", "Tried to access empty variable: " + name);
@ -35,10 +33,10 @@ Value ScriptVariable::Get(const String& name)
void ScriptVariable::Set(const String& name, const Value& value)
{
m_Registry.Register(name, value);
ScriptVariableRegistry::GetInstance()->Register(name, value);
}
void ScriptVariable::Declare(const String& name, const Value& value)
{
m_Registry.RegisterIfNew(name, value);
ScriptVariableRegistry::GetInstance()->RegisterIfNew(name, value);
}

View File

@ -22,6 +22,7 @@
#include "base/i2-base.h"
#include "base/registry.h"
#include "base/singleton.h"
#include "base/value.h"
namespace icinga
@ -43,6 +44,15 @@ private:
static Registry<ScriptVariable, Value> m_Registry;
};
class I2_BASE_API ScriptVariableRegistry : public Registry<ScriptVariableRegistry, Value>
{
public:
static inline ScriptVariableRegistry *GetInstance(void)
{
return Singleton<ScriptVariableRegistry>::GetInstance();
}
};
}
#endif /* SCRIPTVARIABLE_H */

View File

@ -22,7 +22,6 @@
#include "base/convert.h"
#include "base/debug.h"
#include "base/utility.h"
#include "base/scriptvariable.h"
#include "base/application.h"
#include "base/exception.h"
#include <sstream>

View File

@ -23,6 +23,8 @@
#include "config/i2-config.h"
#include "config/debuginfo.h"
#include "base/registry.h"
#include "base/initialize.h"
#include "base/singleton.h"
#include <iostream>
#include <boost/function.hpp>
@ -72,24 +74,23 @@ private:
};
class I2_CONFIG_API ConfigFragmentRegistry : public Registry<ConfigFragmentRegistry, String>
{ };
/**
* Helper class for registering config fragments.
*
* @ingroup base
*/
class RegisterConfigFragmentHelper
{
public:
RegisterConfigFragmentHelper(const String& name, const String& fragment)
static inline ConfigFragmentRegistry *GetInstance(void)
{
ConfigFragmentRegistry::GetInstance()->Register(name, fragment);
return Singleton<ConfigFragmentRegistry>::GetInstance();
}
};
#define REGISTER_CONFIG_FRAGMENT(id, name, fragment) \
I2_EXPORT icinga::RegisterConfigFragmentHelper g_RegisterCF_ ## id(name, fragment)
namespace { \
void RegisterConfigFragment(void) \
{ \
icinga::ConfigFragmentRegistry::GetInstance()->Register(name, fragment); \
} \
\
INITIALIZE_ONCE(RegisterConfigFragment); \
}
}

View File

@ -278,20 +278,26 @@ void ConfigType::ValidateArray(const Array::Ptr& array,
void ConfigType::Register(void)
{
Registry<ConfigType, ConfigType::Ptr>::GetInstance()->Register(GetName(), GetSelf());
ConfigTypeRegistry::GetInstance()->Register(GetName(), GetSelf());
}
ConfigType::Ptr ConfigType::GetByName(const String& name)
{
return Registry<ConfigType, ConfigType::Ptr>::GetInstance()->GetItem(name);
return ConfigTypeRegistry::GetInstance()->GetItem(name);
}
Registry<ConfigType, ConfigType::Ptr>::ItemMap ConfigType::GetTypes(void)
ConfigTypeRegistry::ItemMap ConfigType::GetTypes(void)
{
return Registry<ConfigType, ConfigType::Ptr>::GetInstance()->GetItems();
return ConfigTypeRegistry::GetInstance()->GetItems();
}
void ConfigType::DiscardTypes(void)
{
Registry<ConfigType, ConfigType::Ptr>::GetInstance()->Clear();
ConfigTypeRegistry::GetInstance()->Clear();
}
ConfigTypeRegistry *ConfigTypeRegistry::GetInstance(void)
{
return Singleton<ConfigTypeRegistry>::GetInstance();
}

View File

@ -26,6 +26,7 @@
#include "config/configitem.h"
#include "base/array.h"
#include "base/registry.h"
#include "base/singleton.h"
namespace icinga
{
@ -74,6 +75,12 @@ private:
static void AddParentRules(std::vector<TypeRuleList::Ptr>& ruleLists, const ConfigType::Ptr& item);
};
class I2_CONFIG_API ConfigTypeRegistry : public Registry<ConfigTypeRegistry, ConfigType::Ptr>
{
public:
static ConfigTypeRegistry *GetInstance(void);
};
}
#endif /* CONFIGTYPE_H */

View File

@ -23,6 +23,7 @@
#include "db_ido/i2-db_ido.h"
#include "base/object.h"
#include "base/registry.h"
#include "base/singleton.h"
namespace icinga
{
@ -75,8 +76,14 @@ private:
*
* @ingroup ido
*/
class DbTypeRegistry : public Registry<DbTypeRegistry, DbType::Ptr>
{ };
class I2_DB_IDO_API DbTypeRegistry : public Registry<DbTypeRegistry, DbType::Ptr>
{
public:
static inline DbTypeRegistry *GetInstance(void)
{
return Singleton<DbTypeRegistry>::GetInstance();
}
};
/**
* Helper class for registering DynamicObject implementation classes.