100 lines
No EOL
2.6 KiB
C++
100 lines
No EOL
2.6 KiB
C++
|
|
#pragma once
|
|
|
|
#include "NewPlacement.hpp"
|
|
|
|
#include "primitives/stringobject.h"
|
|
|
|
using namespace obj;
|
|
using namespace tp;
|
|
|
|
void StringObject::constructor(Object* self) {
|
|
new (&NDO_CAST(StringObject, self)->val) String();
|
|
}
|
|
|
|
void StringObject::destructor(StringObject* self) {
|
|
self->val.~String();
|
|
}
|
|
|
|
void StringObject::copy(Object* self, const Object* in) {
|
|
NDO_CAST(StringObject, self)->val = NDO_CAST(StringObject, in)->val;
|
|
}
|
|
|
|
StringObject* StringObject::create(String in) {
|
|
NDO_CASTV(StringObject, NDO->create("str"), out)->val = in;
|
|
return out;
|
|
}
|
|
|
|
void StringObject::from_int(StringObject* self, alni in) {
|
|
// self->val = in;
|
|
}
|
|
|
|
void StringObject::from_float(StringObject* self, alnf in) {
|
|
// self->val = in;
|
|
}
|
|
|
|
void StringObject::from_string(StringObject* self, String in) {
|
|
// self->val = in;
|
|
}
|
|
|
|
String StringObject::to_string(StringObject* self) {
|
|
return self->val;
|
|
}
|
|
|
|
alni StringObject::to_int(StringObject* self) {
|
|
return alni(self->val);
|
|
}
|
|
|
|
alnf StringObject::to_float(StringObject* self) {
|
|
return alnf(self->val);
|
|
}
|
|
|
|
static alni save_size(StringObject* self) {
|
|
alni save_size = 0;
|
|
auto size = self->val.size();
|
|
save_size += (size) * sizeof(*self->val.read());
|
|
save_size += sizeof(decltype(size));
|
|
return save_size;
|
|
}
|
|
|
|
static void save(StringObject* self, ArchiverOut& file_self) {
|
|
file_self << self->val;
|
|
}
|
|
|
|
static void load(ArchiverIn& file_self, StringObject* self) {
|
|
new (&self->val) tp::String();
|
|
file_self >> self->val;
|
|
}
|
|
|
|
alni allocated_size(StringObject* self) {
|
|
// return self->val.sizeAllocatedMem();
|
|
return 0;
|
|
}
|
|
|
|
static bool compare_strings(StringObject* left, StringObject* right) {
|
|
return left->val == right->val;
|
|
}
|
|
|
|
struct ObjectTypeConversions StringObjectTypeConversions = {
|
|
.from_int = (object_from_int)StringObject::from_int,
|
|
.from_float = (object_from_float)StringObject::from_float,
|
|
.from_string = (object_from_string)StringObject::from_string,
|
|
.to_string = (object_to_string)StringObject::to_string,
|
|
.to_int = (object_to_int)StringObject::to_int,
|
|
.to_float = (object_to_float)StringObject::to_float,
|
|
};
|
|
|
|
struct obj::ObjectType StringObject::TypeData = {
|
|
.base = NULL,
|
|
.constructor = StringObject::constructor,
|
|
.destructor = (object_destructor)StringObject::destructor,
|
|
.copy = StringObject::copy,
|
|
.size = sizeof(StringObject),
|
|
.name = "str",
|
|
.convesions = &StringObjectTypeConversions,
|
|
.save_size = (object_save_size)save_size,
|
|
.save = (object_save)save,
|
|
.load = (object_load)load,
|
|
.comparison = (object_compare) compare_strings,
|
|
.allocated_size = (object_allocated_size) allocated_size,
|
|
}; |