-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathEC.ObjBase.cpp
More file actions
62 lines (51 loc) · 1.79 KB
/
EC.ObjBase.cpp
File metadata and controls
62 lines (51 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include "EC.ObjBase.h"
const char* Internal_GetRTTIClassName(const ECRTTIInfo* pInfo);
const ECRTTIInfo::ImplNode& ECRTTIInfo::GetBaseInfo(size_t Index) const
{
// 计算内存偏移:跳过Count,按节点大小索引
return *reinterpret_cast<const ImplNode*>(
reinterpret_cast<const char*>(this) +
sizeof(Count) +
Index * sizeof(ImplNode)
);
}
const char* ECRTTIInfo::GetName() const
{
return Internal_GetRTTIClassName(this);
}
std::vector<const char*> ECRTTIInfo::GetBaseClassName() const
{
std::vector<const char*> Result;
Result.resize(Count);
for (size_t i = 0; i < Count; i++)
Result[i] = Internal_GetRTTIClassName(GetBaseInfo(i).pBaseInfo);
return Result;
}
std::vector<const ECRTTIInfo*> ECRTTIInfo::GetBaseClassInfo() const
{
std::vector<const ECRTTIInfo*> Result;
Result.resize(Count);
for (size_t i = 0; i < Count; i++)
Result[i] = GetBaseInfo(i).pBaseInfo;
return Result;
}
const char* ECRTTIInfo::GetFirstBaseClassName() const
{
return Internal_GetRTTIClassName(GetBaseInfo(0).pBaseInfo);
}
const ECRTTIInfo* ECRTTIInfo::GetFirstBaseClassInfo() const
{
return GetBaseInfo(0).pBaseInfo;
}
size_t ECRTTIInfo::FindTypeOffset(const ECRTTIInfo* TypeToFind) const
{
if (TypeToFind == this)return 0;
for (size_t i = 0; i < Count; i++)
if (GetBaseInfo(i).pBaseInfo == TypeToFind)
return GetBaseInfo(i).Offset;
return FindTypeOffset_Failure;
}
int Internal_GenerateID();
ECUniqueID::ECUniqueID() noexcept :UniqueID(Internal_GenerateID()) {};
ECUniqueID::ECUniqueID(const ECUniqueID&) noexcept :UniqueID(Internal_GenerateID()) {};
ECUniqueID::ECUniqueID(ECUniqueID&&) noexcept :UniqueID(Internal_GenerateID()) {};