SpiecsEngine
 
Loading...
Searching...
No Matches

◆ UCLASS

#define UCLASS ( )

Definition at line 31 of file ClassTraits.h.

31#define UCLASS() \
32
34 \
35 template<> \
36 struct Spices::class_traits<CLASS_SCOPE> \
37 { \
38
40 \
41 CLASS_SCOPE* m_Instance; \
42 \
43
46 \
47 class_traits(CLASS_SCOPE& inst) \
48 { \
49 m_Instance = &inst; \
50 } \
51 \
52
54 \
55 virtual ~class_traits() = default; \
56 \
57
60 \
61 auto& GetInst() { return *m_Instance; } \
62 \
63
68 \
69 template<typename T> \
70 std::tuple<ClassItemType, void*> GetProperty(const std::string& name) \
71 { \
72 ClassItemType type = ClassItemType::UnSetted; \
73 \
74 field_traits<T CLASS_SCOPE::*>* member_trait; \
75 field_traits<T*>* nonmember_trait; \
76 \
77 scl::IterTuple(properties, [&](auto& elem) { \
78 if (elem.name == name) \
79 { \
80 if (elem.is_member()) \
81 { \
82 type = ClassItemType::Member; \
83 \
84 if constexpr (std::is_same_v<decltype(&elem), const field_traits<T CLASS_SCOPE::*>*>) \
85 { \
86 member_trait = const_cast<field_traits<T CLASS_SCOPE::*>*>(&elem); \
87 } \
88 } \
89 else \
90 { \
91 type = ClassItemType::NonMember; \
92 \
93 if constexpr (std::is_same_v<decltype(&elem), const field_traits<T*>*>) \
94 { \
95 nonmember_trait = const_cast<field_traits<T*>*>(&elem); \
96 } \
97 } \
98 } \
99 }); \
100 \
101 switch (type) \
102 { \
103 case ClassItemType::Member: \
104 return std::make_tuple(type, (void*)member_trait); \
105 case ClassItemType::NonMember: \
106 return std::make_tuple(type, (void*)nonmember_trait); \
107 case ClassItemType::UnSetted: \
108 std::stringstream ss; \
109 ss << "Property: " << name << " not finded in this class"; \
110 SPICES_CORE_ERROR(ss.str()); \
111 return std::make_tuple(type, nullptr); \
112 } \
113 } \
114 \
115
120 \
121 template<typename T> \
122 T* GetProperty_V(const std::string& name) \
123 { \
124 SPICES_PROFILE_ZONE; \
125 \
126 auto[type, rowPointer] = GetProperty<T>(name); \
127 \