feat: Added NoNut core
This commit is contained in:
63
src/NoNut/core/Class.cpp
Normal file
63
src/NoNut/core/Class.cpp
Normal file
@@ -0,0 +1,63 @@
|
||||
#include "CommonHeader.h"
|
||||
#include "Class.h"
|
||||
|
||||
namespace nonut
|
||||
{
|
||||
Class::Class(const String& className, const SQObject classObjectInstance)
|
||||
{
|
||||
HSQUIRRELVM vm = Sqrat::DefaultVM::Get();
|
||||
if (classObjectInstance._type == OT_NULL)
|
||||
{
|
||||
const auto top = sq_gettop(vm);
|
||||
|
||||
sq_pushroottable(vm); //push root table
|
||||
sq_pushstring(vm, className.c_str(), className.length()); //push class name
|
||||
|
||||
if (sq_get(vm, -2) == SQ_OK) //retrieve class
|
||||
{
|
||||
sq_getstackobj(vm, -1, &classObject);
|
||||
sq_addref(vm, &classObject);
|
||||
if (sq_createinstance(vm, -1) == SQ_OK) //create class instance
|
||||
{
|
||||
//1. Get object ptr
|
||||
sq_getstackobj(vm, -1, &this->classObjectInstance); //retrieve object
|
||||
sq_addref(vm, &this->classObjectInstance);
|
||||
//Add ref thanks to which object will not be immediately deleted
|
||||
sq_pop(vm, 1); // pop class instance
|
||||
}
|
||||
}
|
||||
sq_settop(vm, top); // TODO: FIX LEAK PROPERLY
|
||||
}
|
||||
else
|
||||
{
|
||||
this->classObjectInstance = classObjectInstance;
|
||||
const auto top = sq_gettop(vm);
|
||||
sq_addref(vm, &this->classObjectInstance);
|
||||
|
||||
sq_pushroottable(vm); //push root table
|
||||
sq_pushstring(vm, className.c_str(), className.length()); //push class name
|
||||
|
||||
if (sq_get(vm, -2) == SQ_OK) //retrieve class
|
||||
{
|
||||
sq_getstackobj(vm, -1, &classObject);
|
||||
sq_addref(vm, &classObject);
|
||||
}
|
||||
|
||||
sq_settop(vm, top);
|
||||
}
|
||||
}
|
||||
|
||||
Class::~Class()
|
||||
{
|
||||
HSQUIRRELVM vm = Sqrat::DefaultVM::Get();
|
||||
sq_release(vm, &classObject);
|
||||
sq_release(vm, &classObjectInstance);
|
||||
sq_resetobject(&classObject);
|
||||
sq_resetobject(&classObjectInstance);
|
||||
}
|
||||
|
||||
SQObject Class::getInstance() const
|
||||
{
|
||||
return classObjectInstance;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user