Skip to content

Commit 1e7f017

Browse files
committed
feat: add ClassField implementation
1 parent 6e98f06 commit 1e7f017

File tree

6 files changed

+51
-0
lines changed

6 files changed

+51
-0
lines changed

engine/foundation/core/private/rtti/class.cpp

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,15 @@ const ClassMethod* Class::get_method(const String& name) const {
9494
return nullptr;
9595
}
9696

97+
const ClassField* Class::get_field(const String& name) const {
98+
const auto& field = mFieldsMap.find(name);
99+
if (field != mFieldsMap.end()) {
100+
return &field.value();
101+
}
102+
103+
return nullptr;
104+
}
105+
97106

98107
//[-------------------------------------------------------]
99108
//[ Namespace ]

engine/foundation/core/private/rtti/func/class_field.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,18 @@ namespace core {
4444
//[-------------------------------------------------------]
4545
//[ Classes ]
4646
//[-------------------------------------------------------]
47+
ClassField::ClassField()
48+
: mOffset(-1) {
49+
}
50+
51+
ClassField::ClassField(const String& name, core::uint32 offset)
52+
: mName(name)
53+
, mOffset(offset) {
54+
}
55+
56+
bool ClassField::operator==(const ClassField& other) const {
57+
return ((mName == other.mName) && (mOffset == other.mOffset));
58+
}
4759

4860

4961
//[-------------------------------------------------------]

engine/foundation/core/public/core/rtti/builder/class_builder.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,8 @@ class ClassBuilder {
9292

9393
ClassBuilder& method(const String& name, FuncBase* func);
9494

95+
ClassBuilder& field(const String& name, core::uint32 offset);
96+
9597
private:
9698

9799
Class* mClass;

engine/foundation/core/public/core/rtti/builder/class_builder.inl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,6 +81,14 @@ ClassBuilder<TClass>& ClassBuilder<TClass>::method(const String& name, FuncBase*
8181
return *this;
8282
}
8383

84+
template<typename TClass>
85+
ClassBuilder<TClass>& ClassBuilder<TClass>::field(const String& name, core::uint32 offset) {
86+
mClass->mFieldsMap[name] = ClassField(name, offset);
87+
mLastRttiMember = &mClass->mFieldsMap[name];
88+
89+
return *this;
90+
}
91+
8492

8593
//[-------------------------------------------------------]
8694
//[ Namespace ]

engine/foundation/core/public/core/rtti/class.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ class Class : public RttiMember {
148148
*/
149149
[[nodiscard]] const ClassMethod* get_method(const String& name) const;
150150

151+
[[nodiscard]] const ClassField* get_field(const String& name) const;
152+
151153
private:
152154
/** The name of the class */
153155
String mName;
@@ -162,6 +164,8 @@ class Class : public RttiMember {
162164
Vector<ClassConstructor> mConstructors;
163165

164166
core::hash_map<String, ClassMethod> mMethodsMap;
167+
168+
core::hash_map<String, ClassField> mFieldsMap;
165169
};
166170

167171

engine/foundation/core/public/core/rtti/func/class_field.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
//[ Includes ]
3030
//[-------------------------------------------------------]
3131
#include "core/core.h"
32+
#include "core/rtti/rtti_member.h"
3233

3334

3435
//[-------------------------------------------------------]
@@ -50,6 +51,21 @@ namespace core {
5051
//[-------------------------------------------------------]
5152
//[ Classes ]
5253
//[-------------------------------------------------------]
54+
class ClassField : public RttiMember {
55+
public:
56+
57+
ClassField();
58+
59+
ClassField(const String& name, core::uint32 offset);
60+
61+
62+
bool operator==(const ClassField& other) const;
63+
64+
private:
65+
66+
String mName;
67+
core::uint32 mOffset;
68+
};
5369

5470

5571
//[-------------------------------------------------------]

0 commit comments

Comments
 (0)