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.