|
|
@@ -50,7 +50,7 @@ enum class DataVariableType { Scalar, Array, Struct };
|
|
|
class RMLUICORE_API DataVariable {
|
|
|
public:
|
|
|
DataVariable() {}
|
|
|
- DataVariable(VariableDefinition* definition, void* ptr) : definition(definition), ptr(ptr) {}
|
|
|
+ DataVariable(VariableDefinition* definition, DataPointer ptr) : definition(definition), ptr(ptr) {}
|
|
|
|
|
|
explicit operator bool() const { return definition; }
|
|
|
|
|
|
@@ -62,7 +62,7 @@ public:
|
|
|
|
|
|
private:
|
|
|
VariableDefinition* definition = nullptr;
|
|
|
- void* ptr = nullptr;
|
|
|
+ DataPointer ptr = nullptr;
|
|
|
};
|
|
|
|
|
|
|
|
|
@@ -77,11 +77,11 @@ public:
|
|
|
virtual ~VariableDefinition() = default;
|
|
|
DataVariableType Type() const { return type; }
|
|
|
|
|
|
- virtual bool Get(void* ptr, Variant& variant);
|
|
|
- virtual bool Set(void* ptr, const Variant& variant);
|
|
|
+ virtual bool Get(DataPointer ptr, Variant& variant);
|
|
|
+ virtual bool Set(DataPointer ptr, const Variant& variant);
|
|
|
|
|
|
- virtual int Size(void* ptr);
|
|
|
- virtual DataVariable Child(void* ptr, const DataAddressEntry& address);
|
|
|
+ virtual int Size(DataPointer ptr);
|
|
|
+ virtual DataVariable Child(DataPointer ptr, const DataAddressEntry& address);
|
|
|
|
|
|
protected:
|
|
|
VariableDefinition(DataVariableType type) : type(type) {}
|
|
|
@@ -99,14 +99,14 @@ class ScalarDefinition final : public VariableDefinition {
|
|
|
public:
|
|
|
ScalarDefinition() : VariableDefinition(DataVariableType::Scalar) {}
|
|
|
|
|
|
- bool Get(void* ptr, Variant& variant) override
|
|
|
+ bool Get(DataPointer ptr, Variant& variant) override
|
|
|
{
|
|
|
- variant = *static_cast<const T*>(ptr);
|
|
|
+ variant = *ptr.Get<T*>();
|
|
|
return true;
|
|
|
}
|
|
|
- bool Set(void* ptr, const Variant& variant) override
|
|
|
+ bool Set(DataPointer ptr, const Variant& variant) override
|
|
|
{
|
|
|
- return variant.GetInto<T>(*static_cast<T*>(ptr));
|
|
|
+ return variant.GetInto<T>(*ptr.Get<T*>());
|
|
|
}
|
|
|
};
|
|
|
|
|
|
@@ -115,8 +115,8 @@ class RMLUICORE_API FuncDefinition final : public VariableDefinition {
|
|
|
public:
|
|
|
FuncDefinition(DataGetFunc get, DataSetFunc set);
|
|
|
|
|
|
- bool Get(void* ptr, Variant& variant) override;
|
|
|
- bool Set(void* ptr, const Variant& variant) override;
|
|
|
+ bool Get(DataPointer ptr, Variant& variant) override;
|
|
|
+ bool Set(DataPointer ptr, const Variant& variant) override;
|
|
|
|
|
|
private:
|
|
|
DataGetFunc get;
|
|
|
@@ -129,18 +129,18 @@ class ScalarFuncDefinition final : public VariableDefinition {
|
|
|
public:
|
|
|
ScalarFuncDefinition(DataTypeGetFunc<T> get, DataTypeSetFunc<T> set) : VariableDefinition(DataVariableType::Scalar), get(get), set(set) {}
|
|
|
|
|
|
- bool Get(void* ptr, Variant& variant) override
|
|
|
+ bool Get(DataPointer ptr, Variant& variant) override
|
|
|
{
|
|
|
if (!get)
|
|
|
return false;
|
|
|
- get(*static_cast<const T*>(ptr), variant);
|
|
|
+ get(*ptr.Get<T*>(), variant);
|
|
|
return true;
|
|
|
}
|
|
|
- bool Set(void* ptr, const Variant& variant) override
|
|
|
+ bool Set(DataPointer ptr, const Variant& variant) override
|
|
|
{
|
|
|
if (!set)
|
|
|
return false;
|
|
|
- set(*static_cast<T*>(ptr), variant);
|
|
|
+ set(*ptr.Get<T*>(), variant);
|
|
|
return true;
|
|
|
}
|
|
|
|
|
|
@@ -154,7 +154,7 @@ class RMLUICORE_API StructDefinition final : public VariableDefinition {
|
|
|
public:
|
|
|
StructDefinition();
|
|
|
|
|
|
- DataVariable Child(void* ptr, const DataAddressEntry& address) override;
|
|
|
+ DataVariable Child(DataPointer ptr, const DataAddressEntry& address) override;
|
|
|
|
|
|
void AddMember(const String& name, UniquePtr<VariableDefinition> member);
|
|
|
|
|
|
@@ -168,14 +168,14 @@ class ArrayDefinition final : public VariableDefinition {
|
|
|
public:
|
|
|
ArrayDefinition(VariableDefinition* underlying_definition) : VariableDefinition(DataVariableType::Array) , underlying_definition(underlying_definition) {}
|
|
|
|
|
|
- int Size(void* ptr) override {
|
|
|
- return int(static_cast<Container*>(ptr)->size());
|
|
|
+ int Size(DataPointer ptr) override {
|
|
|
+ return int(ptr.Get<Container*>()->size());
|
|
|
}
|
|
|
|
|
|
protected:
|
|
|
- DataVariable Child(void* void_ptr, const DataAddressEntry& address) override
|
|
|
+ DataVariable Child(DataPointer void_ptr, const DataAddressEntry& address) override
|
|
|
{
|
|
|
- Container* ptr = static_cast<Container*>(void_ptr);
|
|
|
+ Container* ptr = void_ptr.Get<Container*>();
|
|
|
const int index = address.index;
|
|
|
|
|
|
const int container_size = int(ptr->size());
|
|
|
@@ -191,7 +191,7 @@ protected:
|
|
|
auto it = ptr->begin();
|
|
|
std::advance(it, index);
|
|
|
|
|
|
- void* next_ptr = &(*it);
|
|
|
+ DataPointer next_ptr = &(*it);
|
|
|
return DataVariable(underlying_definition, next_ptr);
|
|
|
}
|
|
|
|
|
|
@@ -204,13 +204,13 @@ class RMLUICORE_API BasePointerDefinition : public VariableDefinition {
|
|
|
public:
|
|
|
BasePointerDefinition(VariableDefinition* underlying_definition);
|
|
|
|
|
|
- bool Get(void* ptr, Variant& variant) override;
|
|
|
- bool Set(void* ptr, const Variant& variant) override;
|
|
|
- int Size(void* ptr) override;
|
|
|
- DataVariable Child(void* ptr, const DataAddressEntry& address) override;
|
|
|
+ bool Get(DataPointer ptr, Variant& variant) override;
|
|
|
+ bool Set(DataPointer ptr, const Variant& variant) override;
|
|
|
+ int Size(DataPointer ptr) override;
|
|
|
+ DataVariable Child(DataPointer ptr, const DataAddressEntry& address) override;
|
|
|
|
|
|
protected:
|
|
|
- virtual void* DereferencePointer(void* ptr) = 0;
|
|
|
+ virtual DataPointer DereferencePointer(DataPointer ptr) = 0;
|
|
|
|
|
|
private:
|
|
|
VariableDefinition* underlying_definition;
|
|
|
@@ -222,7 +222,7 @@ public:
|
|
|
PointerDefinition(VariableDefinition* underlying_definition) : BasePointerDefinition(underlying_definition) {}
|
|
|
|
|
|
protected:
|
|
|
- void* DereferencePointer(void* ptr) override {
|
|
|
+ DataPointer DereferencePointer(DataPointer ptr) override {
|
|
|
return PointerTraits<T>::Dereference(ptr);
|
|
|
}
|
|
|
};
|
|
|
@@ -233,8 +233,8 @@ public:
|
|
|
MemberObjectDefinition(VariableDefinition* underlying_definition, MemberType Object::* member_ptr) : BasePointerDefinition(underlying_definition), member_ptr(member_ptr) {}
|
|
|
|
|
|
protected:
|
|
|
- void* DereferencePointer(void* base_ptr) override {
|
|
|
- return &(static_cast<Object*>(base_ptr)->*member_ptr);
|
|
|
+ DataPointer DereferencePointer(DataPointer base_ptr) override {
|
|
|
+ return &(base_ptr.Get<Object*>()->*member_ptr);
|
|
|
}
|
|
|
|
|
|
private:
|
|
|
@@ -245,14 +245,13 @@ private:
|
|
|
template<typename Object, typename MemberType, typename BasicReturnType>
|
|
|
class MemberGetFuncDefinition final : public BasePointerDefinition {
|
|
|
public:
|
|
|
-
|
|
|
MemberGetFuncDefinition(VariableDefinition* underlying_definition, MemberType Object::* member_get_func_ptr)
|
|
|
: BasePointerDefinition(underlying_definition), member_get_func_ptr(member_get_func_ptr)
|
|
|
{}
|
|
|
|
|
|
protected:
|
|
|
- void* DereferencePointer(void* base_ptr) override {
|
|
|
- return static_cast<void*>(Extract((static_cast<Object*>(base_ptr)->*member_get_func_ptr)()));
|
|
|
+ DataPointer DereferencePointer(DataPointer base_ptr) override {
|
|
|
+ return DataPointer(Extract((base_ptr.Get<Object*>()->*member_get_func_ptr)()));
|
|
|
}
|
|
|
|
|
|
private:
|
|
|
@@ -274,46 +273,46 @@ public:
|
|
|
: VariableDefinition(underlying_definition->Type()), underlying_definition(underlying_definition), member_get_func_ptr(member_get_func_ptr), member_set_func_ptr(member_set_func_ptr)
|
|
|
{}
|
|
|
|
|
|
- bool Get(void* ptr, Variant& variant) override {
|
|
|
+ bool Get(DataPointer ptr, Variant& variant) override {
|
|
|
return GetDetail(ptr, variant);
|
|
|
}
|
|
|
- bool Set(void* ptr, const Variant& variant) override {
|
|
|
+ bool Set(DataPointer ptr, const Variant& variant) override {
|
|
|
return SetDetail(ptr, variant);
|
|
|
}
|
|
|
|
|
|
private:
|
|
|
template<typename T = MemberGetType, typename std::enable_if<IsVoidMemberFunc<T>::value, int>::type = 0>
|
|
|
- bool GetDetail(void* /*ptr*/, Variant& /*variant*/)
|
|
|
+ bool GetDetail(DataPointer /*ptr*/, Variant& /*variant*/)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
template<typename T = MemberGetType, typename std::enable_if<!IsVoidMemberFunc<T>::value, int>::type = 0>
|
|
|
- bool GetDetail(void* ptr, Variant& variant)
|
|
|
+ bool GetDetail(DataPointer ptr, Variant& variant)
|
|
|
{
|
|
|
RMLUI_ASSERT(member_get_func_ptr);
|
|
|
|
|
|
- auto&& value = (static_cast<Object*>(ptr)->*member_get_func_ptr)();
|
|
|
- bool result = underlying_definition->Get(static_cast<void*>(&value), variant);
|
|
|
+ auto&& value = (ptr.Get<Object*>()->*member_get_func_ptr)();
|
|
|
+ bool result = underlying_definition->Get(DataPointer(&value), variant);
|
|
|
return result;
|
|
|
}
|
|
|
|
|
|
template<typename T = MemberSetType, typename std::enable_if<IsVoidMemberFunc<T>::value, int>::type = 0>
|
|
|
- bool SetDetail(void* /*ptr*/, const Variant& /*variant*/)
|
|
|
+ bool SetDetail(DataPointer /*ptr*/, const Variant& /*variant*/)
|
|
|
{
|
|
|
return false;
|
|
|
}
|
|
|
|
|
|
template<typename T = MemberSetType, typename std::enable_if<!IsVoidMemberFunc<T>::value, int>::type = 0>
|
|
|
- bool SetDetail(void* ptr, const Variant& variant)
|
|
|
+ bool SetDetail(DataPointer ptr, const Variant& variant)
|
|
|
{
|
|
|
RMLUI_ASSERT(member_set_func_ptr);
|
|
|
|
|
|
UnderlyingType result;
|
|
|
- if (!underlying_definition->Set(static_cast<void*>(&result), variant))
|
|
|
+ if (!underlying_definition->Set(DataPointer(&result), variant))
|
|
|
return false;
|
|
|
|
|
|
- (static_cast<Object*>(ptr)->*member_set_func_ptr)(result);
|
|
|
+ (ptr.Get<Object*>()->*member_set_func_ptr)(result);
|
|
|
|
|
|
return true;
|
|
|
}
|