7
7
8
8
#include " OGTypeID.h"
9
9
#include " metadata.hpp"
10
+ #include " ../Util/assert.hpp"
10
11
11
12
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
12
13
#include < swift/Runtime/Metadata.h>
@@ -40,28 +41,72 @@ OGTypeKind OGTypeGetKind(OGTypeID typeID) {
40
41
#endif
41
42
}
42
43
44
+ void OGTypeApplyFields (const void *type, const void *block, void *context) {
45
+ // TODO
46
+ return ;
47
+ }
48
+
49
+ bool OGTypeApplyFields2 (const void *type, OGTypeApplyOptions options, const void *block, void *context) {
50
+ // TODO
51
+ return false ;
52
+ }
53
+
43
54
#if OPENGRAPH_RELEASE >= OPENGRAPH_RELEASE_2024
44
55
45
- OGTypeSignature const OGTypeGetSignature (OGTypeID typeID) {
56
+ uint32_t OGTypeGetEnumTag (OGTypeID typeID, const void *value ) {
46
57
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
47
58
auto metadata = reinterpret_cast <OG::swift::metadata const *>(typeID);
48
- // TODO
49
- return OGTypeSignature{};
59
+ auto vwt = metadata->getValueWitnesses ();
60
+ if (!swift::EnumValueWitnessTable::classof (vwt)) {
61
+ OG::precondition_failure (" not an enum type: %s" , metadata->name (false ).data );
62
+ }
63
+ auto enum_vwt = static_cast <const swift::EnumValueWitnessTable *>(vwt);
64
+ return enum_vwt->getEnumTag (static_cast <const swift::OpaqueValue *>(value), metadata);
50
65
#else
51
- return OGTypeSignature{} ;
66
+ return 0 ;
52
67
#endif
53
68
}
54
- void const * OGTypeGetDescriptor (OGTypeID typeID) {
69
+
70
+ void OGTypeProjectEnumData (OGTypeID typeID, void *value) {
55
71
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
56
72
auto metadata = reinterpret_cast <OG::swift::metadata const *>(typeID);
57
- return metadata->descriptor ();
73
+ auto vwt = metadata->getValueWitnesses ();
74
+ if (!swift::EnumValueWitnessTable::classof (vwt)) {
75
+ OG::precondition_failure (" not an enum type: %s" , metadata->name (false ).data );
76
+ }
77
+ auto enum_vwt = static_cast <const swift::EnumValueWitnessTable *>(vwt);
78
+ enum_vwt->destructiveProjectEnumData (static_cast <swift::OpaqueValue *>(value), metadata);
58
79
#else
59
- return nullptr ;
80
+ return ;
81
+ #endif
82
+ }
83
+
84
+ void OGTypeInjectEnumTag (OGTypeID typeID, uint32_t tag, void *value) {
85
+ #ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
86
+ auto metadata = reinterpret_cast <OG::swift::metadata const *>(typeID);
87
+ auto vwt = metadata->getValueWitnesses ();
88
+ if (!swift::EnumValueWitnessTable::classof (vwt)) {
89
+ OG::precondition_failure (" not an enum type: %s" , metadata->name (false ).data );
90
+ }
91
+ auto enum_vwt = static_cast <const swift::EnumValueWitnessTable *>(vwt);
92
+ return enum_vwt->destructiveInjectEnumTag (static_cast <swift::OpaqueValue *>(value), tag, metadata);
93
+ #else
94
+ return ;
60
95
#endif
61
96
}
62
97
63
98
#endif /* OPENGRAPH_RELEASE */
64
99
100
+ bool OGTypeApplyEnumData () {
101
+ // TODO
102
+ return false ;
103
+ }
104
+
105
+ bool OGTypeApplyMutableEnumData () {
106
+ // TODO
107
+ return false ;
108
+ }
109
+
65
110
CFStringRef OGTypeDescription (OGTypeID typeID) {
66
111
CFMutableStringRef ref = CFStringCreateMutable (CFAllocatorGetDefault (), 0 );
67
112
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
@@ -71,6 +116,28 @@ CFStringRef OGTypeDescription(OGTypeID typeID) {
71
116
return ref;
72
117
}
73
118
119
+ #if OPENGRAPH_RELEASE >= OPENGRAPH_RELEASE_2024
120
+
121
+ OGTypeSignature const OGTypeGetSignature (OGTypeID typeID) {
122
+ #ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
123
+ auto metadata = reinterpret_cast <OG::swift::metadata const *>(typeID);
124
+ // TODO
125
+ return OGTypeSignature{};
126
+ #else
127
+ return OGTypeSignature{};
128
+ #endif
129
+ }
130
+ void const * OGTypeGetDescriptor (OGTypeID typeID) {
131
+ #ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
132
+ auto metadata = reinterpret_cast <OG::swift::metadata const *>(typeID);
133
+ return metadata->descriptor ();
134
+ #else
135
+ return nullptr ;
136
+ #endif
137
+ }
138
+
139
+ #endif /* OPENGRAPH_RELEASE */
140
+
74
141
void const * OGTypeNominalDescriptor (OGTypeID typeID) {
75
142
#ifdef OPENGRAPH_SWIFT_TOOLCHAIN_SUPPORTED
76
143
auto metadata = reinterpret_cast <OG::swift::metadata const *>(typeID);
0 commit comments