23 #include "BuiltInObjectTypeIDs.h"
25 #ifndef TEMPLATE_BASE_CC
26 #define TEMPLATE_BASE_CC
57 template <
class ObjType>
61 if (std::is_base_of<Object, ObjType>::value) {
62 info = (int16_t)getTypeID<ObjType>();
64 }
else if (std::is_base_of<String, ObjType>::value) {
67 }
else if (std::is_base_of<HandleBase, ObjType>::value) {
72 info = -((int32_t)
sizeof(ObjType));
81 if (
info == String_TYPEID) {
82 ((String*)deleteMe)->~String();
85 }
else if (
info == Handle_TYPEID) {
86 ((Handle<Nothing>*)deleteMe)->~Handle();
89 }
else if (
info > 0) {
96 if (temp !=
nullptr) {
97 ((Object*)&temp)->deleteObject(deleteMe);
102 ((Object*)deleteMe)->deleteObject(deleteMe);
110 if (info == String_TYPEID) {
111 new (target) String();
112 *((String*)target) = *((String*)source);
115 }
else if (info == Handle_TYPEID) {
116 new (target) Handle<Nothing>();
117 *((Handle<Nothing>*)target) = *((Handle<Nothing>*)source);
120 }
else if (info > 0) {
123 void* temp =
nullptr;
129 if (temp !=
nullptr) {
130 ((Object*)&temp)->setUpAndCopyFrom(target, source);
135 ((Object*)source)->setUpAndCopyFrom(target, source);
141 memmove(target, source, -info);
148 if (info == String_TYPEID) {
149 return sizeof(String);
152 }
else if (info == Handle_TYPEID) {
153 return sizeof(Handle<Nothing>);
156 }
else if (info > 0) {
158 void* temp =
nullptr;
162 if (temp !=
nullptr) {
163 return ((Object*)&temp)->getSize(ofMe);
168 return ((Object*)ofMe)->getSize(ofMe);
178 if (info > Handle_TYPEID)
size_t getSizeOfConstituentObject(void *forMe) const
void deleteConstituentObject(void *deleteMe) const
static void * getVTablePtr(int16_t objectTypeID)
int32_t getExactTypeInfoValue() const
void setVTablePtr(void *forMe) const
int16_t getTypeCode() const
void setUpAndCopyFromConstituentObject(void *target, void *source) const
PDBTemplateBase & operator=(const PDBTemplateBase &toMe)
bool descendsFromObject() const