8 #include <rttr/registration>
9 #include <utility/dllexport.h>
11 #include <utility/module.h>
142 using Enum = rttr::enumeration;
193 return static_cast<EPropertyMetaData>(
static_cast<uint8_t
>(a) &
static_cast<uint8_t
>(b));
198 return static_cast<EPropertyMetaData>(
static_cast<uint8_t
>(a) |
static_cast<uint8_t
>(b));
206 return type.is_arithmetic() || type.is_enumeration() || type == rtti::TypeInfo::get<std::string>();
214 const rtti::Variant& meta_data =
property.get_metadata(
"flags");
215 if (!meta_data.is_valid())
218 uint8_t current_flags = meta_data.convert<uint8_t>();
219 return (current_flags & (uint8_t)flags) != 0;
228 const rtti::Variant& meta_data =
property.get_metadata(
"filetype");
229 return meta_data.is_valid() ?
230 meta_data.convert<uint8_t>() == (uint8_t)filetype :
false;
262 auto result = base.get_method(methodName);
263 if (result.is_valid())
266 return type.get_method(methodName);
279 #define RTTI_OF(Type) nap::rtti::TypeInfo::get<Type>()
291 #define RTTI_ENABLE(...) \
292 RTTR_ENABLE(__VA_ARGS__) \
293 RTTR_REGISTRATION_FRIEND
300 #define CONCAT_UNIQUE_NAMESPACE(x, y) namespace x##y
301 #define UNIQUE_REGISTRATION_NAMESPACE(id) CONCAT_UNIQUE_NAMESPACE(__rtti_registration_, id)
310 #define RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR_1(Type) \
311 UNIQUE_REGISTRATION_NAMESPACE(__COUNTER__) \
313 static nap::ModuleDescriptor* getModuleDescriptor() { return NAP_MODULE_DESCIPTOR_HANDLE; } \
316 using namespace rttr; \
317 std::string rtti_class_type_name = #Type; \
318 registration::class_<Type> rtti_class_type(#Type); \
319 rtti_class_type.method(nap::rtti::method::moduleDescription, &getModuleDescriptor);
329 #define RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR_2(Type, Description) \
330 UNIQUE_REGISTRATION_NAMESPACE(__COUNTER__) \
332 static const char* getTypeDescription() { return Description; } \
333 static nap::ModuleDescriptor* getModuleDescriptor() { return NAP_MODULE_DESCIPTOR_HANDLE; } \
336 using namespace rttr; \
337 std::string rtti_class_type_name = #Type; \
338 registration::class_<Type> rtti_class_type(#Type); \
339 rtti_class_type.method(nap::rtti::method::description, &getTypeDescription); \
340 rtti_class_type.method(nap::rtti::method::moduleDescription, &getModuleDescriptor);
343 #define GET_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR_MACRO(_1,_2,NAME,...) NAME
352 #define RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR(...) GET_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR_MACRO(__VA_ARGS__, RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR_2, RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR_1)(__VA_ARGS__)
366 #define RTTI_PROPERTY_3(Name, Member, Flags) \
367 rtti_class_type.property(Name, Member)( metadata("flags", (uint8_t)(Flags)));
377 #define RTTI_PROPERTY_4(Name, Member, Flags, Description) \
378 rtti_class_type.property(Name, Member)( \
379 metadata("flags", (uint8_t)(Flags)), \
380 metadata("description", (const char*)(Description)));
382 #define GET_PROPERTY_MACRO(_1,_2,_3,_4,NAME,...) NAME
393 #define RTTI_PROPERTY(...) GET_PROPERTY_MACRO(__VA_ARGS__, RTTI_PROPERTY_4, RTTI_PROPERTY_3)(__VA_ARGS__)
408 #define RTTI_PROPERTY_FILELINK_4(Name, Member, Flags, FileType) \
409 rtti_class_type.property(Name, Member)( \
410 metadata("flags", (uint8_t)(nap::rtti::EPropertyMetaData::FileLink | Flags)), \
411 metadata("filetype", (uint8_t)(FileType)));
422 #define RTTI_PROPERTY_FILELINK_5(Name, Member, Flags, FileType, Description) \
423 rtti_class_type.property(Name, Member)( \
424 metadata("flags", (uint8_t)(nap::rtti::EPropertyMetaData::FileLink | Flags)), \
425 metadata("filetype", (uint8_t)(FileType)), \
426 metadata("description", (const char*)(Description)));
428 #define GET_PROPERTY_FILELINK_MACRO(_1,_2,_3,_4,_5,NAME,...) NAME
439 #define RTTI_PROPERTY_FILELINK(...) GET_PROPERTY_FILELINK_MACRO(__VA_ARGS__, RTTI_PROPERTY_FILELINK_5, RTTI_PROPERTY_FILELINK_4)(__VA_ARGS__)
452 #define RTTI_FUNCTION(Name, Member) \
453 rtti_class_type.method(Name, Member);
460 #define RTTI_CUSTOM_REGISTRATION_FUNCTION(Func)
467 #define RTTI_CONSTRUCTOR(...) \
468 rtti_class_type.constructor<__VA_ARGS__>()(policy::ctor::as_raw_ptr);
483 #define RTTI_VALUE_CONSTRUCTOR(...) \
484 rtti_class_type.constructor<__VA_ARGS__>()(policy::ctor::as_object);
495 #define RTTI_END_CLASS \
511 #define RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR_1(Type) \
512 RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR(Type)
522 #define RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR_2(Type, Description) \
523 RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR(Type, Description)
525 #define GET_RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR_MACRO(_1,_2,NAME,...) NAME
535 #define RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR(...) GET_RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR_MACRO(__VA_ARGS__, RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR_2, RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR_1)(__VA_ARGS__)
547 #define RTTI_END_STRUCT \
561 #define RTTI_BEGIN_CLASS_1(Type) \
562 RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR(Type) \
572 #define RTTI_BEGIN_CLASS_2(Type, Description) \
573 RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR(Type, Description) \
576 #define GET_RTTI_BEGIN_CLASS_MACRO(_1,_2,NAME,...) NAME
585 #define RTTI_BEGIN_CLASS(...) GET_RTTI_BEGIN_CLASS_MACRO(__VA_ARGS__, RTTI_BEGIN_CLASS_2, RTTI_BEGIN_CLASS_1)(__VA_ARGS__)
599 #define RTTI_BEGIN_STRUCT_1(Type) \
600 RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR(Type) \
601 RTTI_VALUE_CONSTRUCTOR()
611 #define RTTI_BEGIN_STRUCT_2(Type, Description) \
612 RTTI_BEGIN_STRUCT_NO_DEFAULT_CONSTRUCTOR(Type, Description) \
613 RTTI_VALUE_CONSTRUCTOR()
615 #define GET_RTTI_BEGIN_STRUCT_MACRO(_1,_2,NAME,...) NAME
624 #define RTTI_BEGIN_STRUCT(...) GET_RTTI_BEGIN_STRUCT_MACRO(__VA_ARGS__, RTTI_BEGIN_STRUCT_2, RTTI_BEGIN_STRUCT_1)(__VA_ARGS__)
635 #define RTTI_BEGIN_ENUM(Type) \
636 UNIQUE_REGISTRATION_NAMESPACE(__COUNTER__) \
640 using namespace rttr; \
641 registration::enumeration<Type>(#Type) \
649 #define RTTI_ENUM_VALUE(Value, String) \
655 #define RTTI_END_ENUM \
671 #define RTTI_DEFINE_BASE_1(Type) \
672 RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR(Type) \
682 #define RTTI_DEFINE_BASE_2(Type, Description) \
683 RTTI_BEGIN_CLASS_NO_DEFAULT_CONSTRUCTOR(Type, Description) \
686 #define GET_RTTI_DEFINE_BASE_MACRO(_1,_2,NAME,...) NAME
695 #define RTTI_DEFINE_BASE(...) GET_RTTI_DEFINE_BASE_MACRO(__VA_ARGS__, RTTI_DEFINE_BASE_2, RTTI_DEFINE_BASE_1)(__VA_ARGS__)
706 #define RTTI_DEFINE_CLASS_1(Type) \
707 RTTI_BEGIN_CLASS(Type) \
715 #define RTTI_DEFINE_CLASS_2(Type, Description) \
716 RTTI_BEGIN_CLASS(Type, Description) \
719 #define GET_RTTI_DEFINE_CLASS_MACRO(_1,_2,NAME,...) NAME
726 #define RTTI_DEFINE_CLASS(...) GET_RTTI_DEFINE_CLASS_MACRO(__VA_ARGS__, RTTI_DEFINE_CLASS_2, RTTI_DEFINE_CLASS_1)(__VA_ARGS__)
737 #define RTTI_DEFINE_STRUCT_1(Type) \
738 RTTI_BEGIN_STRUCT(Type) \
746 #define RTTI_DEFINE_STRUCT_2(Type, Description) \
747 RTTI_BEGIN_STRUCT(Type, Description) \
750 #define GET_RTTI_DEFINE_STRUCT_MACRO(_1,_2,NAME,...) NAME
757 #define RTTI_DEFINE_STRUCT(...) GET_RTTI_DEFINE_STRUCT_MACRO(__VA_ARGS__, RTTI_DEFINE_STRUCT_2, RTTI_DEFINE_STRUCT_1)(__VA_ARGS__)
EPropertyMetaData
Definition: typeinfo.h:165
constexpr const char * toObject
to object pointer
Definition: typeinfo.h:157
constexpr const char * assign
assignment
Definition: typeinfo.h:156
@ Embedded
An embedded pointer.
@ VertShader
Points to a .frag file, must be used with EPropertyMetaData::FileLink.
rttr::variant_array_view VariantArray
Definition: typeinfo.h:146
@ ImageSequence
Points to a an image sequence, must be used with EPropertyMetaData::FileLink.
@ Required
Load will fail if the property isn't set.
@ FragShader
Points to a .vert file, must be used with EPropertyMetaData::FileLink.
rttr::variant_associative_view VariantMap
Definition: typeinfo.h:147
constexpr const char * description
rtti type description
Definition: typeinfo.h:154
bool isTypeMatch(const rtti::TypeInfo &typeA, const rtti::TypeInfo &typeB, ETypeCheck typeCheck)
Definition: typeinfo.h:246
bool isFileType(const rtti::Property &property, EPropertyFileType filetype)
Definition: typeinfo.h:226
Definition: deserializeresult.h:28
rttr::enumeration Enum
Definition: typeinfo.h:142
rttr::property Property
Definition: typeinfo.h:143
constexpr const char * toString
to object path
Definition: typeinfo.h:158
constexpr const char * translateTargetID
transform id
Definition: typeinfo.h:159
@ Any
Can point to any file, default.
bool hasFlag(const rtti::Property &property, EPropertyMetaData flags)
Definition: typeinfo.h:212
@ ReadOnly
A read only property.
@ Default
Uses the (class) default if the property isn't set.
bool isPrimitive(const rtti::TypeInfo &type)
Definition: typeinfo.h:204
rttr::method findMethodRecursive(const rtti::TypeInfo &type, const std::string &methodName)
Definition: typeinfo.h:258
Definition: templateapp.h:17
constexpr const char * moduleDescription
nap module description
Definition: typeinfo.h:155
@ EXACT_MATCH
The type needs to be of the exact same kind.
rttr::instance Instance
Definition: typeinfo.h:145
EPropertyFileType
Definition: typeinfo.h:177
rttr::variant Variant
Definition: typeinfo.h:144
@ IS_DERIVED_FROM
The type is derived from the specified type.
rttr::type TypeInfo
Definition: typeinfo.h:141
ETypeCheck
Definition: typeinfo.h:237
EPropertyMetaData operator&(EPropertyMetaData a, EPropertyMetaData b)
Definition: typeinfo.h:191
EPropertyMetaData operator|(EPropertyMetaData a, EPropertyMetaData b)
Definition: typeinfo.h:196
@ Audio
Points to an audio file, must be used with EPropertyMetaData::FileLink.