Separate objects context and interface

This commit is contained in:
IlyaShurupov 2024-03-25 10:37:31 +03:00
parent e937d189df
commit 55daf0f303
32 changed files with 362 additions and 384 deletions

View file

@ -17,7 +17,7 @@ void ClassObject::copy(ClassObject* self, const ClassObject* blueprint) {
objects_api::copy(self->members, blueprint->members);
}
void ClassObject::destructor(ClassObject* self) { NDO->destroy(self->members); }
void ClassObject::destructor(ClassObject* self) { objects_api::destroy(self->members); }
void ClassObject::addMember(Object* obj, const std::string& id) { members->put(id, obj); }
@ -32,14 +32,14 @@ alni ClassObject::save_size(ClassObject* self) {
void ClassObject::save(ClassObject* self, ArchiverOut& file_self) {
// save dict object
alni ndo_object_adress = NDO->save(file_self, self->members);
alni ndo_object_adress = objects_api::save(file_self, self->members);
file_self << ndo_object_adress;
}
void ClassObject::load(ArchiverIn& file_self, ClassObject* self) {
alni ndo_object_address;
file_self >> ndo_object_address;
self->members = objects_api::cast<DictObject>(NDO->load(file_self, ndo_object_address));
self->members = objects_api::cast<DictObject>(objects_api::load(file_self, ndo_object_address));
tp::obj::objects_api::increaseReferenceCount(self->members);
}
@ -53,7 +53,7 @@ alni allocated_size(ClassObject* self) { return sizeof(DictObject*); }
alni allocated_size_recursive(ClassObject* self) {
alni out = sizeof(DictObject*);
out += NDO->objsize_ram_recursive_util(self->members, self->members->type);
out += objects_api::objsize_ram_recursive_util(self->members, self->members->type);
return out;
}

View file

@ -12,14 +12,14 @@ void DictObject::copy(DictObject* self, const DictObject* src) {
constructor(self);
for (auto item : src->items) {
auto instance = NDO->instantiate(item->val);
auto instance = objects_api::instantiate(item->val);
self->items.put(item->key, instance);
}
}
void DictObject::destructor(DictObject* self) {
for (auto item : self->items) {
NDO->destroy(item->val);
objects_api::destroy(item->val);
}
self->items.~Map();
}
@ -51,7 +51,7 @@ void DictObject::save(DictObject* self, ArchiverOut& file_self) {
// save hashmap pairs
for (auto item : self->items) {
// item val
alni ndo_object_adress = NDO->save(file_self, item->val);
alni ndo_object_adress = objects_api::save(file_self, item->val);
file_self << ndo_object_adress;
// item key
@ -70,7 +70,7 @@ void DictObject::load(ArchiverIn& file_self, DictObject* self) {
// read val
alni ndo_object_adress;
file_self >> ndo_object_adress;
Object* val = NDO->load(file_self, ndo_object_adress);
Object* val = objects_api::load(file_self, ndo_object_adress);
// read key value
std::string key;
@ -105,21 +105,21 @@ alni DictObject::allocated_size(DictObject* self) {
alni DictObject::allocated_size_recursive(DictObject* self) {
alni out = allocated_size(self);
for (auto item : self->items) {
out += NDO->objsize_ram_recursive_util(item->val, item->val->type);
out += objects_api::objsize_ram_recursive_util(item->val, item->val->type);
}
return out;
}
void DictObject::put(const std::string& str, Object* obj) {
DEBUG_ASSERT(obj);
NDO->increaseReferenceCount(obj);
objects_api::increaseReferenceCount(obj);
items.put(str, obj);
}
void DictObject::remove(const std::string& str) {
auto idx = items.presents(str);
if (idx) {
NDO->destroy(items.getSlotVal(idx));
objects_api::destroy(items.getSlotVal(idx));
items.remove(str);
}
}

View file

@ -7,7 +7,7 @@ using namespace obj;
void LinkObject::constructor(LinkObject* self) { self->link = nullptr; }
void LinkObject::destructor(LinkObject* self) {
if (self->link) NDO->destroy(self->link);
if (self->link) objects_api::destroy(self->link);
}
void LinkObject::copy(LinkObject* self, const LinkObject* in) { self->setLink(in->link); }
@ -21,7 +21,7 @@ alni LinkObject::save_size(LinkObject* self) { return sizeof(alni); }
void LinkObject::save(LinkObject* self, ArchiverOut& file_self) {
if (self->link != nullptr) {
alni link_object_save_adress = NDO->save(file_self, self->link);
alni link_object_save_adress = objects_api::save(file_self, self->link);
file_self << link_object_save_adress;
} else {
alni null = -1;
@ -37,8 +37,8 @@ void LinkObject::load(ArchiverIn& file_self, LinkObject* self) {
if (saved_object_adress == -1) {
self->link = nullptr;
} else {
self->link = NDO->load(file_self, saved_object_adress);
NDO->increaseReferenceCount(self->link);
self->link = objects_api::load(file_self, saved_object_adress);
objects_api::increaseReferenceCount(self->link);
}
}
@ -53,7 +53,7 @@ alni LinkObject::allocated_size(LinkObject* self) { return sizeof(Object*); }
alni LinkObject::allocated_size_recursive(LinkObject* self) {
alni out = sizeof(Object*);
if (self->link) {
out += NDO->objsize_ram_recursive_util(self->link, self->link->type);
out += objects_api::objsize_ram_recursive_util(self->link, self->link->type);
}
return out;
}
@ -61,8 +61,8 @@ alni LinkObject::allocated_size_recursive(LinkObject* self) {
Object* LinkObject::getLink() { return link; }
void LinkObject::setLink(Object* obj) {
if (link) NDO->destroy(link);
if (obj) NDO->increaseReferenceCount(obj);
if (link) objects_api::destroy(link);
if (obj) objects_api::increaseReferenceCount(obj);
link = obj;
}

View file

@ -18,7 +18,7 @@ void ListObject::copy(ListObject* in, const ListObject* target) {
void ListObject::destructor(ListObject* in) {
for (auto item : in->items) {
NDO->destroy(item.data());
objects_api::destroy(item.data());
}
in->items.removeAll();
}
@ -33,7 +33,7 @@ void ListObject::save(ListObject* self, ArchiverOut& file_self) {
file_self << len;
for (auto item : self->items) {
alni ndo_object_adress = NDO->save(file_self, item.data());
alni ndo_object_adress = objects_api::save(file_self, item.data());
file_self << ndo_object_adress;
}
}
@ -47,7 +47,7 @@ void ListObject::load(ArchiverIn& file_self, ListObject* self) {
for (alni i = 0; i < len; i++) {
alni ndo_object_adress;
file_self >> ndo_object_adress;
self->pushBack(NDO->load(file_self, ndo_object_adress));
self->pushBack(objects_api::load(file_self, ndo_object_adress));
}
}
@ -71,30 +71,30 @@ alni ListObject::allocated_size_recursive(ListObject* self) {
ASSERT(false)
// alni out = self->items.sizeAllocatedMem();
for (auto item : self->items) {
// out += NDO->objsize_ram_recursive_util(item.data(), item->type);
// out += objects_api::objsize_ram_recursive_util(item.data(), item->type);
}
// return out;
return 0;
}
void ListObject::pushBack(Object* obj) {
obj::NDO->increaseReferenceCount(obj);
obj::objects_api::increaseReferenceCount(obj);
items.pushBack(obj);
}
void ListObject::pushFront(Object* obj) {
obj::NDO->increaseReferenceCount(obj);
obj::objects_api::increaseReferenceCount(obj);
items.pushFront(obj);
}
void ListObject::delNode(tp::List<Object*>::Node* node) {
obj::NDO->destroy(node->data);
obj::objects_api::destroy(node->data);
items.deleteNode(node);
}
void ListObject::popBack() {
auto obj = items.last();
if (obj) obj::NDO->destroy(obj->data);
if (obj) obj::objects_api::destroy(obj->data);
items.popBack();
}

View file

@ -51,8 +51,8 @@ void MethodObject::load(ArchiverIn& file_self, obj::MethodObject* self) {
void MethodObject::Initialize() {
obj::ScriptSection::initialize();
NDO->define(&MethodObject::TypeData);
obj::NDO->type_groups.addType(&MethodObject::TypeData, { "Primitives" });
objects_api::define(&MethodObject::TypeData);
objects_api::addTypeToGroup(&MethodObject::TypeData, { "Primitives" });
}
void MethodObject::UnInitialize() { obj::ScriptSection::uninitialize(); }

View file

@ -10,7 +10,7 @@ bool uninit_flag = false;
void NullObject::uninit() {
uninit_flag = true;
NDO->destroy(NdoNull_globalInstance);
objects_api::destroy(NdoNull_globalInstance);
NdoNull_globalInstance = nullptr;
}

View file

@ -16,13 +16,11 @@ static alni save_size(TypeObject* self) { return save_string_size(self->mTypeRef
static void save(TypeObject* self, ArchiverOut& file_self) { save_string(file_self, self->mTypeRef->name); }
static void load(ArchiverIn& file_self, TypeObject* self) {
std::string nameid;
load_string(file_self, nameid);
std::string name;
load_string(file_self, name);
auto idx = NDO->types.presents(nameid);
if (idx) {
self->mTypeRef = NDO->types.getSlotVal(idx);
if (objects_api::isType(name.c_str())) {
self->mTypeRef = objects_api::getType(name.c_str());
} else {
self->mTypeRef = &NullObject::TypeData;
}
@ -31,10 +29,8 @@ static void load(ArchiverIn& file_self, TypeObject* self) {
static alni allocated_size(TypeObject* self) { return sizeof(alni); }
static void from_string(TypeObject* self, const std::string& in) {
auto idx = NDO->types.presents(in);
if (idx) {
self->mTypeRef = NDO->types.getSlotVal(idx);
if (objects_api::isType(in.c_str())) {
self->mTypeRef = objects_api::getType(in.c_str());
} else {
self->mTypeRef = &NullObject::TypeData;
}