static SQRESULT sq_mysql_constructor(HSQUIRRELVM v) { SQ_FUNC_VARS(v); SQ_GET_STRING(v, 2, host); SQ_GET_STRING(v, 3, username); SQ_GET_STRING(v, 4, password); SQ_GET_STRING(v, 5, sourcename); SQ_OPT_INTEGER(v, 6, port, 3306); SQ_OPT_STRING(v, 7, sockname, NULL); SQ_OPT_INTEGER(v, 8, optflags, 0); MYSQL *self=0; if(load_libmysqlclient(dynamicLibName)) { self = dlmysql_init(NULL); if (!self) return sq_throwerror(v, _SC("error connecting: Out of memory.")); if (!dlmysql_real_connect(self, host, username, password, sourcename, port, sockname, optflags)) { SQRESULT res = sq_throwerror(v, _SC("error connecting to database. MySQL: %s"), dlmysql_error(self)); dlmysql_close (self); /* Close conn if connect failed */ return res; } } else return sq_throwerror(v, _SC("Failed to load libmysqlclient !")); sq_setinstanceup(v, 1, self); sq_setreleasehook(v,1, sq_mysql_releasehook); //save a weakref to allow statement return it's db sq_pushuserpointer(v, self); sq_weakref(v, 1); sq_setonregistrytable(v); return 1; }
void ThreadQueue::add(HSQUIRRELVM vm) { // create a weakref to the VM HSQOBJECT vm_obj = vm_to_object(vm); sq_pushobject(global_vm, vm_obj); sq_weakref(global_vm, -1); HSQOBJECT object; if(SQ_FAILED(sq_getstackobj(global_vm, -1, &object))) { sq_pop(global_vm, 2); throw SquirrelError(global_vm, "Couldn't get thread weakref from vm"); } sq_addref(global_vm, &object); threads.push_back(object); sq_pop(global_vm, 2); }
void TimeScheduler::schedule_thread(HSQUIRRELVM scheduled_vm, float time) { // create a weakref to the VM SQObject vm_obj = vm_to_object(scheduled_vm); sq_pushobject(global_vm, vm_obj); sq_weakref(global_vm, -1); ScheduleEntry entry; if(SQ_FAILED(sq_getstackobj(global_vm, -1, & entry.thread_ref))) { sq_pop(global_vm, 2); throw SquirrelError(global_vm, "Couldn't get thread weakref from vm"); } entry.wakeup_time = time; sq_addref(global_vm, & entry.thread_ref); sq_pop(global_vm, 2); schedule.push_back(entry); std::push_heap(schedule.begin(), schedule.end()); }
static SQInteger obj_delegate_weakref(HSQUIRRELVM v) { sq_weakref(v,1); return 1; }