Fix incorrect base class name for Array/Dictionary/etc.

refs #9921
This commit is contained in:
Gunnar Beutner 2015-08-17 08:14:04 +02:00
parent 9ecfd9c830
commit db8b4afa58
6 changed files with 19 additions and 15 deletions

View File

@ -26,7 +26,7 @@
using namespace icinga; using namespace icinga;
REGISTER_PRIMITIVE_TYPE(Array, Array::GetPrototype()); REGISTER_PRIMITIVE_TYPE(Array, Object, Array::GetPrototype());
/** /**
* Restrieves a value from an array. * Restrieves a value from an array.

View File

@ -25,7 +25,7 @@
using namespace icinga; using namespace icinga;
REGISTER_PRIMITIVE_TYPE(Dictionary, Dictionary::GetPrototype()); REGISTER_PRIMITIVE_TYPE(Dictionary, Object, Dictionary::GetPrototype());
/** /**
* Retrieves a value from a dictionary. * Retrieves a value from a dictionary.

View File

@ -23,7 +23,7 @@
using namespace icinga; using namespace icinga;
REGISTER_PRIMITIVE_TYPE_NOINST(Function, Function::GetPrototype()); REGISTER_PRIMITIVE_TYPE_NOINST(Function, Object, Function::GetPrototype());
Function::Function(const Callback& function, bool side_effect_free) Function::Function(const Callback& function, bool side_effect_free)
: m_Callback(function), m_SideEffectFree(side_effect_free) : m_Callback(function), m_SideEffectFree(side_effect_free)

View File

@ -25,7 +25,7 @@
using namespace icinga; using namespace icinga;
REGISTER_PRIMITIVE_TYPE(Object, Object::GetPrototype()); REGISTER_PRIMITIVE_TYPE(Object, None, Object::GetPrototype());
/** /**
* Default constructor for the Object class. * Default constructor for the Object class.

View File

@ -22,8 +22,8 @@
using namespace icinga; using namespace icinga;
PrimitiveType::PrimitiveType(const String& name, const ObjectFactory& factory) PrimitiveType::PrimitiveType(const String& name, const String& base, const ObjectFactory& factory)
: m_Name(name), m_Factory(factory) : m_Name(name), m_Base(base), m_Factory(factory)
{ } { }
String PrimitiveType::GetName(void) const String PrimitiveType::GetName(void) const
@ -33,7 +33,10 @@ String PrimitiveType::GetName(void) const
Type::Ptr PrimitiveType::GetBaseType(void) const Type::Ptr PrimitiveType::GetBaseType(void) const
{ {
if (m_Base == "None")
return Type::Ptr(); return Type::Ptr();
else
return Type::GetByName(m_Base);
} }
int PrimitiveType::GetAttributes(void) const int PrimitiveType::GetAttributes(void) const

View File

@ -30,7 +30,7 @@ namespace icinga
class I2_BASE_API PrimitiveType : public Type class I2_BASE_API PrimitiveType : public Type
{ {
public: public:
PrimitiveType(const String& name, const ObjectFactory& factory = ObjectFactory()); PrimitiveType(const String& name, const String& base, const ObjectFactory& factory = ObjectFactory());
virtual String GetName(void) const; virtual String GetName(void) const;
virtual Type::Ptr GetBaseType(void) const; virtual Type::Ptr GetBaseType(void) const;
@ -44,6 +44,7 @@ protected:
private: private:
String m_Name; String m_Name;
String m_Base;
ObjectFactory m_Factory; ObjectFactory m_Factory;
}; };
@ -51,18 +52,18 @@ private:
namespace { namespace UNIQUE_NAME(prt) { namespace prt ## type { \ namespace { namespace UNIQUE_NAME(prt) { namespace prt ## type { \
void RegisterBuiltinType(void) \ void RegisterBuiltinType(void) \
{ \ { \
icinga::Type::Ptr t = new PrimitiveType(#type); \ icinga::Type::Ptr t = new PrimitiveType(#type, "None"); \
t->SetPrototype(prototype); \ t->SetPrototype(prototype); \
icinga::Type::Register(t); \ icinga::Type::Register(t); \
} \ } \
INITIALIZE_ONCE_WITH_PRIORITY(RegisterBuiltinType, 15); \ INITIALIZE_ONCE_WITH_PRIORITY(RegisterBuiltinType, 15); \
} } } } } }
#define REGISTER_PRIMITIVE_TYPE_FACTORY(type, prototype, factory) \ #define REGISTER_PRIMITIVE_TYPE_FACTORY(type, base, prototype, factory) \
namespace { namespace UNIQUE_NAME(prt) { namespace prt ## type { \ namespace { namespace UNIQUE_NAME(prt) { namespace prt ## type { \
void RegisterPrimitiveType(void) \ void RegisterPrimitiveType(void) \
{ \ { \
icinga::Type::Ptr t = new PrimitiveType(#type, factory);\ icinga::Type::Ptr t = new PrimitiveType(#type, #base, factory);\
t->SetPrototype(prototype); \ t->SetPrototype(prototype); \
icinga::Type::Register(t); \ icinga::Type::Register(t); \
type::TypeInstance = t; \ type::TypeInstance = t; \
@ -71,11 +72,11 @@ private:
} } } \ } } } \
DEFINE_TYPE_INSTANCE(type) DEFINE_TYPE_INSTANCE(type)
#define REGISTER_PRIMITIVE_TYPE(type, prototype) \ #define REGISTER_PRIMITIVE_TYPE(type, base, prototype) \
REGISTER_PRIMITIVE_TYPE_FACTORY(type, prototype, DefaultObjectFactory<type>) REGISTER_PRIMITIVE_TYPE_FACTORY(type, base, prototype, DefaultObjectFactory<type>)
#define REGISTER_PRIMITIVE_TYPE_NOINST(type, prototype) \ #define REGISTER_PRIMITIVE_TYPE_NOINST(type, base, prototype) \
REGISTER_PRIMITIVE_TYPE_FACTORY(type, prototype, NULL) REGISTER_PRIMITIVE_TYPE_FACTORY(type, base, prototype, NULL)
} }