Пример #1
0
SQRESULT sqext_register_ffi(HSQUIRRELVM v)
{
    int saved_top = sq_gettop(v);
    //add a namespace ffi
	sq_pushstring(v,_SC("ffi"),-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)FFI_LIB_TAG);
    sq_insert_reg_funcs(v, sq_ffi_methods);

    int i;
    for (i = 0; ffi_types_wrap[i].name != 0; i++) {
        struct FFI_type_name *e = &ffi_types_wrap[i];
        sq_pushstring(v, e->name, -1);
        sq_pushuserpointer(v, e->type);
        sq_newslot(v, -3, SQFalse);
    }
    sq_newslot(v,-3,SQTrue); //add ffi table to the root table


    sq_create_delegate_table(v, sq_lib_methods, FFI_LIB_LIB_TAG);
    sq_create_delegate_table(v, sq_func_methods, FFI_LIB_FUNC_TAG);
    sq_create_delegate_table(v, sq_var_methods, FFI_LIB_VAR_TAG);

    sq_settop(v, saved_top);

    return SQ_OK;
}
Пример #2
0
SQInteger sqstd_register_stringlib(HSQUIRRELVM v)
{
	sq_pushstring(v,_SC("regexp"),-1);
	sq_newclass(v,SQFalse);
	SQInteger i = 0;
	while(rexobj_funcs[i].name != 0) {
		SQRegFunction &f = rexobj_funcs[i];
		sq_pushstring(v,f.name,-1);
		sq_newclosure(v,f.f,0);
		sq_setparamscheck(v,f.nparamscheck,f.typemask);
		sq_setnativeclosurename(v,-1,f.name);
		sq_newslot(v,-3,SQFalse);
		i++;
	}
	sq_newslot(v,-3,SQFalse);

	i = 0;
	while(stringlib_funcs[i].name!=0)
	{
		sq_pushstring(v,stringlib_funcs[i].name,-1);
		sq_newclosure(v,stringlib_funcs[i].f,0);
		sq_setparamscheck(v,stringlib_funcs[i].nparamscheck,stringlib_funcs[i].typemask);
		sq_setnativeclosurename(v,-1,stringlib_funcs[i].name);
		sq_newslot(v,-3,SQFalse);
		i++;
	}
	return 1;
}
Пример #3
0
    // プロパティ登録
    void registerProperty(const tjs_char *propertyName, tTJSVariant &property, bool staticMember) {

        ttstr name = L"set";
        name += toupper(*propertyName);
        name += (propertyName + 1);
        sq_pushstring(v, name.c_str(), -1);
        sq_pushvariant(v, property);
        if (staticMember) {
            sq_pushvariant(v, tjsClassObj);
            sq_newclosure(v, TJSObject::tjsStaticSetter, 2);
            sq_newslot(v, -3, SQTrue);
        } else {
            sq_newclosure(v, TJSObject::tjsSetter, 1);
            sq_newslot(v, -3, SQFalse);
        }

        name = L"get";
        name += toupper(*propertyName);
        name += (propertyName + 1);
        sq_pushstring(v, name.c_str(), -1);
        sq_pushvariant(v, property);
        if (staticMember) {
            sq_pushvariant(v, tjsClassObj);
            sq_newclosure(v, TJSObject::tjsStaticGetter, 2);
            sq_newslot(v, -3, SQTrue);
        } else {
            sq_newclosure(v, TJSObject::tjsGetter, 1);
            sq_newslot(v, -3, SQFalse);
        }
    }
Пример #4
0
void init_streamclass(HSQUIRRELVM v)
{
    sq_pushregistrytable(v);
    sq_pushstring(v,_SC("std_stream"),-1);
    if(SQ_FAILED(sq_get(v,-2))) {
        sq_pushstring(v,_SC("std_stream"),-1);
        sq_newclass(v,SQFalse);
        sq_settypetag(v,-1,(SQUserPointer)SQSTD_STREAM_TYPE_TAG);
        SQInteger i = 0;
        while(_stream_methods[i].name != 0) {
            const SQRegFunction &f = _stream_methods[i];
            sq_pushstring(v,f.name,-1);
            sq_newclosure(v,f.f,0);
            sq_setparamscheck(v,f.nparamscheck,f.typemask);
            sq_newslot(v,-3,SQFalse);
            i++;
        }
        sq_newslot(v,-3,SQFalse);
        sq_pushroottable(v);
        sq_pushstring(v,_SC("stream"),-1);
        sq_pushstring(v,_SC("std_stream"),-1);
        sq_get(v,-4);
        sq_newslot(v,-3,SQFalse);
        sq_pop(v,1);
    }
    else {
        sq_pop(v,1); //result
    }
    sq_pop(v,1);
}
Пример #5
0
SQRESULT sqext_register_MySQL(HSQUIRRELVM v)
{
    sq_pushstring(v,MySQL_TAG,-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)MySQL_TAG);
    sq_insert_reg_funcs(v, sq_mysql_methods);
    sq_newslot(v,-3,SQTrue);

    sq_pushstring(v,MySQL_Statement_TAG,-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)MySQL_Statement_TAG);
    sq_insert_reg_funcs(v, sq_mysql_statement_methods);
    sq_newslot(v,-3,SQTrue);

    sq_pushstring(v,MySQL_Result_TAG,-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)MySQL_Result_TAG);
    sq_insert_reg_funcs(v, sq_mysql_result_methods);
    sq_pushstring(v, _curr_row_key, -1);
    sq_pushnull(v);
    sq_newslot(v, -3, SQFalse);
    sq_newslot(v,-3,SQTrue);

    return 0;
}
Пример #6
0
/* This defines a function that opens up your library. */
SQRESULT sqext_register_axtls (HSQUIRRELVM v) {
    //add a namespace axtls
	sq_pushstring(v, SQ_LIBNAME, -1);
	sq_newtable(v);

	sq_insert_reg_funcs(v, axtls_obj_funcs);

    //add constants
    KeyIntPtrType KeyIntPtr;
    for (KeyIntPtr = axtls_constants; KeyIntPtr->Str; KeyIntPtr++) {
        sq_pushstring(v, KeyIntPtr->Str, -1);    //first the key
        sq_pushinteger(v, KeyIntPtr->Val);       //then the value
        sq_newslot(v, -3, SQFalse);              //store then
    }

    //now create the SSL Context class
	sq_pushstring(v,ssl_ctx_NAME,-1);
	sq_newclass(v,SQFalse);
	sq_settypetag(v,-1,(void*)SSL_CTX_Tag);
	sq_insert_reg_funcs(v, ssl_ctx_obj_funcs);
	sq_newslot(v,-3,SQFalse);

    //now create the SSL class
	sq_pushstring(v,ssl_NAME,-1);
	sq_newclass(v,SQFalse);
	sq_settypetag(v,-1,(void*)SSL_Tag);
	sq_insert_reg_funcs(v, ssl_obj_funcs);
	sq_newslot(v,-3,SQFalse);

	sq_newslot(v,-3,SQFalse); //add axtls table to the root table

    return SQ_OK;
}
Пример #7
0
HSQOBJECT class_init(HSQUIRRELVM v,SQFUNCTION c,const SQChar * p_name)
{	
	HSQOBJECT class_id;
	sq_pushroottable(v);
	sq_pushstring(v,p_name,-1);

	sq_newclass(v,SQFalse);
	sq_getstackobj(v,-1,&class_id);		
	sq_settypetag(v,-1,&class_id);		

	HSQOBJECT string_constructor;
	sq_pushstring(v,_SC("constructor"),-1);
	sq_resetobject(&string_constructor);
	sq_getstackobj(v,-1,&string_constructor);
	sq_newclosure(v,c,0);
	sq_newslot(v,-3,false);
		
	sq_pushstring(v,_SC("_cloned"),-1);
	sq_newclosure(v,clone<T>,0);
	sq_newslot(v,-3,false);
		
	sq_newslot(v,-3,false);
	sq_pop(v,1);

	return class_id;
}
Пример #8
0
 // ファンクション登録
 void registerFunction(const tjs_char *functionName, tTJSVariant &function, bool staticMember) {
     sq_pushstring(v, functionName, -1);
     sq_pushvariant(v, function);
     if (staticMember) {
         sq_pushvariant(v, tjsClassObj);
         sq_newclosure(v, TJSObject::tjsStaticInvoker, 2);
         sq_newslot(v, -3, SQTrue);
     } else {
         sq_newclosure(v, TJSObject::tjsInvoker, 1);
         sq_newslot(v, -3, SQFalse);
     }
 }
Пример #9
0
SQRESULT declare_stream(HSQUIRRELVM v,const SQChar* name,SQUserPointer typetag,const SQChar* reg_name,const SQRegFunction *methods,const SQRegFunction *globals)
{
    if(sq_gettype(v,-1) != OT_TABLE)
        return sq_throwerror(v,_SC("table expected"));
    SQInteger top = sq_gettop(v);
    //create delegate
    init_streamclass(v);
    sq_pushregistrytable(v);
    sq_pushstring(v,reg_name,-1);
    sq_pushstring(v,_SC("std_stream"),-1);
    if(SQ_SUCCEEDED(sq_get(v,-3))) {
        sq_newclass(v,SQTrue);
        sq_settypetag(v,-1,typetag);
        SQInteger i = 0;
        while(methods[i].name != 0) {
            const SQRegFunction &f = methods[i];
            sq_pushstring(v,f.name,-1);
            sq_newclosure(v,f.f,0);
            sq_setparamscheck(v,f.nparamscheck,f.typemask);
            sq_setnativeclosurename(v,-1,f.name);
            sq_newslot(v,-3,SQFalse);
            i++;
        }
        sq_newslot(v,-3,SQFalse);
        sq_pop(v,1);

        i = 0;
        while(globals[i].name!=0)
        {
            const SQRegFunction &f = globals[i];
            sq_pushstring(v,f.name,-1);
            sq_newclosure(v,f.f,0);
            sq_setparamscheck(v,f.nparamscheck,f.typemask);
            sq_setnativeclosurename(v,-1,f.name);
            sq_newslot(v,-3,SQFalse);
            i++;
        }
        //register the class in the target table
        sq_pushstring(v,name,-1);
        sq_pushregistrytable(v);
        sq_pushstring(v,reg_name,-1);
        sq_get(v,-2);
        sq_remove(v,-2);
        sq_newslot(v,-3,SQFalse);

        sq_settop(v,top);
        return SQ_OK;
    }
    sq_settop(v,top);
    return SQ_ERROR;
}
Пример #10
0
void CSquirrelVM::BeginRegisterScriptClass(const char* className, scriptFunction pfnFunction, void* userPointer, const char* baseClass)
{

	iFuncIndex = 0;
#if 1
	int n = 0;
	oldtop = sq_gettop(m_pVM);
	sq_pushroottable(m_pVM);
	sq_pushstring(m_pVM, className, -1);

	if(baseClass) {
		sq_pushstring(m_pVM, baseClass, -1);
		if(SQ_FAILED(sq_get(m_pVM, -3))) { // make sure base exists
			sq_settop(m_pVM, oldtop);
			return;
		}
	}
	if(SQ_FAILED(sq_newclass(m_pVM, baseClass ? 1 : 0))) {
		sq_settop(m_pVM, oldtop);
		return;
	}

	sq_pushstring(m_pVM, _SC("constructor"), -1);
	if (userPointer != nullptr)
	{
		sq_pushuserpointer(m_pVM, userPointer);
		sq_newclosure(m_pVM, (SQFUNCTION) pfnFunction, 1);
	}
	else
		sq_newclosure(m_pVM, (SQFUNCTION)pfnFunction, 0);
	sq_newslot(m_pVM, -3, false); // Add the constructor method
#endif
}
Пример #11
0
SQInteger sqlang_register_global_func(HSQUIRRELVM J, SQFUNCTION f, char *fname)
{
    sq_pushstring(J, fname, -1);
    sq_newclosure(J, f, 0); /* create a new function */
    sq_newslot(J, -3, SQFalse);
    return 0;
}
Пример #12
0
void BindInput()
{
	Sqrat::Class<CInput, Sqrat::NoConstructor> def;

	def.Func("KeyUp", &CInput::KeyUp);
	def.Func("KeyPressed", &CInput::KeyPressed);
	def.Func("KeyHeld", &CInput::KeyHeld);
	def.Func("KeyReleased", &CInput::KeyReleased);
		
	Sqrat::RootTable().Bind("InputSystem", def);
	
	//Sqrat::ConstTable().Const("KEY_LEFT", KEY_LEFT);
	MAKE_KEY( KEY_LEFT );
	MAKE_KEY( KEY_RIGHT );
	MAKE_KEY( KEY_UP );
	MAKE_KEY( KEY_DOWN );
	MAKE_KEY( KEY_Q );
	MAKE_KEY( KEY_W );
	MAKE_KEY( KEY_PAGEUP );
	MAKE_KEY( KEY_PAGEDOWN );
	MAKE_KEY( KEY_HOME );

	// Push the singleton to squirrel
	sq_pushroottable( Sqrat::DefaultVM::Get() );
	sq_pushstring( Sqrat::DefaultVM::Get(), "InputSystem", -1 );
	sq_get(  Sqrat::DefaultVM::Get(), -2 );
	sq_pushstring(  Sqrat::DefaultVM::Get(), "Input", -1 );
	sq_createinstance(  Sqrat::DefaultVM::Get(), -2 );
	sq_setinstanceup(  Sqrat::DefaultVM::Get(), -1, (SQUserPointer)Input() );
	sq_newslot(  Sqrat::DefaultVM::Get(), -4, SQFalse );
	sq_pop(  Sqrat::DefaultVM::Get(), 2 );
}
Пример #13
0
void Sq_RegisterFunc(HSQUIRRELVM v,SQFUNCTION f,const char *fname, int ParamNum, const char *params) {
  sq_pushstring(v,fname,-1);
  sq_newclosure(v,f,0);
  sq_newslot(v,-3,SQFalse);
  if(params)
    sq_setparamscheck(v, ParamNum, _SC(params)); 
}
Пример #14
0
SQInteger register_global_func(HSQUIRRELVM& v,SQFUNCTION f,const char *fname)
{
	sq_pushroottable(v);
	sq_pushstring(v,fname,-1);
	sq_newclosure(v,f,0);
	sq_newslot(v,-3,SQFalse);
	sq_pop(v,1);
}
Пример #15
0
void setGlobalFunction(HSQUIRRELVM vm, const char * name, SQFUNCTION cb_func)
{
    sq_pushroottable(vm);
    sq_pushstring(vm, name, -1);
    sq_newclosure(vm, cb_func, 0);
    sq_newslot(vm, -3, false);
    sq_pop(vm, 1); // pop roottable
}
Пример #16
0
SQInteger register_member_func(HSQUIRRELVM& v,SQFUNCTION f,const char *fname,HSQOBJECT id)
{
	sq_pushobject(v,id);
	sq_pushstring(v,fname,-1);
	sq_newclosure(v,f,0);
	sq_newslot(v,-3,SQFalse);
	sq_pop(v,1);
}
Пример #17
0
SQInteger SbuRegisterGlobalFunc(HSQUIRRELVM v, SQFUNCTION f, const SQChar* fname)
{
    sq_pushroottable(v);
    sq_pushstring(v,fname,-1);
    sq_newclosure(v,f,0); //create a new function
    sq_newslot(v,-3,SQFalse); 
    sq_pop(v,1); //pops the root table  
    return 0;
}
Пример #18
0
/* This defines a function that opens up your library. */
SQRESULT sqext_register_fossil (HSQUIRRELVM sqvm) {
    //add a namespace sqmix
	sq_pushstring(sqvm,_SC("sqfossil"),-1);
	sq_newclass(sqvm,SQFalse);
    sq_insert_reg_funcs(sqvm, fossil_obj_funcs);
	sq_newslot(sqvm,-3,SQTrue); //add sq_fossil table to the root table

	return SQ_OK;
}
Пример #19
0
/*
 * Register member method.
 * Must be called before loading script files
 */
void register_member_func(HSQUIRRELVM v, const char* cname, const char* fname, SQFUNCTION func) {
    sq_pushroottable(v);
    sq_pushstring(v, cname, -1);
    if(SQ_SUCCEEDED(sq_get(v, -2))) {
        sq_pushstring(v, fname, -1);
        sq_newclosure(v, func, 0);
        sq_newslot(v, -3, true);
    }
    sq_pop(v, 1);
}
Пример #20
0
SQRESULT sqstd_register_mathlib(HSQUIRRELVM v)
{
    SQInteger i=0;
    while(mathlib_funcs[i].name!=0) {
        sq_pushstring(v,mathlib_funcs[i].name,-1);
        sq_newclosure(v,mathlib_funcs[i].f,0);
        sq_setparamscheck(v,mathlib_funcs[i].nparamscheck,mathlib_funcs[i].typemask);
        sq_setnativeclosurename(v,-1,mathlib_funcs[i].name);
        sq_newslot(v,-3,SQFalse);
        i++;
    }
    sq_pushstring(v,_SC("RAND_MAX"),-1);
    sq_pushinteger(v,RAND_MAX);
    sq_newslot(v,-3,SQFalse);
    sq_pushstring(v,_SC("PI"),-1);
    sq_pushfloat(v,(SQFloat)M_PI);
    sq_newslot(v,-3,SQFalse);
    return SQ_OK;
}
Пример #21
0
SQRESULT sqext_register_libclang(HSQUIRRELVM v)
{
    sq_pushstring(v,LibClang_TAG,-1);
    sq_newclass(v,SQFalse);
    sq_settypetag(v,-1,(void*)LibClang_TAG);
    sq_insert_reg_funcs(v, sq_libclang_methods);
    sq_newslot(v,-3,SQTrue);

    return 0;
}
Пример #22
0
void GlobalUtility::Set()
{
	Module::instance().getScriptInterface().PushDocumentTable(mVM, m_pDoc);
	SQRESULT sqr;

	if (m_pSelf)
	{
		ElementWrapper wrapper;
		wrapper.setElement(m_pSelf);

		//Add the global slot self
		sq_pushstring(mVM, "self", -1);
		sqr = sqb::Push<ElementWrapper>(mVM, wrapper);

		ROCKETSQUIRREL_ASSERT(SQ_SUCCEEDED(sqr));

		sqr = sq_newslot(mVM, -3, false);

		ROCKETSQUIRREL_ASSERT(SQ_SUCCEEDED(sqr));

		mSelfSet = true;
	}

	if (m_pEvt)
	{
		EventWrapper wrapper(m_pEvt);

		//Add the global slot event
		sq_pushstring(mVM, "event", -1);
		sqr = sqb::Push<EventWrapper>(mVM, wrapper);

		ROCKETSQUIRREL_ASSERT(SQ_SUCCEEDED(sqr));

		sqr = sq_newslot(mVM, -3, false);

		ROCKETSQUIRREL_ASSERT(SQ_SUCCEEDED(sqr));

		mEvtSet = true;
	}

	sq_poptop(mVM);
}
Пример #23
0
SQRESULT sqrat_register_importlib(HSQUIRRELVM v) {
    sq_pushroottable(v);

    sq_pushstring(v, _SC("import"), -1);
    sq_newclosure(v, &sqratbase_import, 0);
    sq_newslot(v, -3, 0);

    sq_pop(v, 1); // pop sqrat table

    return SQ_OK;
}
Пример #24
0
MTR_DCLSPC void MTR_CALL MTR_ScriptsRegisterFunction(SQFUNCTION func,
 const char * funcname)
{
    sq_pushroottable(mtrVm);
    sq_pushstring(mtrVm, funcname, -1);
    sq_newclosure(mtrVm, func, 0); //create a new function
    sq_newslot(mtrVm, -3, SQFalse);
    sq_pop(mtrVm, 1); //pops the root table
    MTR_LogWrite_s("Script function added:", 3, MTR_LMT_INFO, funcname);
    return;
}
Пример #25
0
    /* This defines a function that opens up your library. */
    SQRESULT sqext_register_BitVector (HSQUIRRELVM v) {
        //add a namespace BitVector
        sq_pushstring(v, SQ_LIBNAME, -1);
        sq_newclass(v,SQFalse);
        sq_settypetag(v,-1,(SQUserPointer)BitVector_Tag);

        sq_insert_reg_funcs(v, BitVector_obj_funcs);

        sq_newslot(v,-3,SQFalse); //add BitVector table to the root table

        return SQ_OK;
    }
Пример #26
0
SQRESULT NitLibCom(HSQUIRRELVM v)
{
	NitLibCom::Register(v);
	NitBindComTypeLib::Register(v);

	NitBindCom* com = new NitBindCom(v);
	sq_pushroottable(v);
	sq_pushstring(v, "com", -1);
	NitBind::push(v, com);
	sq_newslot(v, -3, true);
	sq_poptop(v);

	// Prevent deletion from registry
	sq_pushregistrytable(v);
	sq_pushuserpointer(v, com);
	NitBind::push(v, com);
	sq_newslot(v, -3, true);
	sq_poptop(v);

	return SQ_OK;
}
Пример #27
0
    SQRESULT sqext_register_sq_zlib(HSQUIRRELVM v)
    {
        sq_pushliteral(v,_SC("zlib"));
        sq_newtable(v);
        INT_CONST(v, Z_DEFAULT_COMPRESSION);
        INT_CONST(v, Z_BEST_SPEED);
        INT_CONST(v, Z_BEST_COMPRESSION);

        sq_insertfunc(v, _SC("version"), sq_zlib_version, 1, _SC("."), SQTrue);
        sq_insertfunc(v, _SC("deflate"), sq_zlib_deflate, -2, _SC(".si"), SQTrue);
        sq_insertfunc(v, _SC("inflate"), sq_zlib_inflate, -2, _SC(".si"), SQTrue);

        sq_pushliteral(v,_SC("Unzip"));
        sq_newclass(v,SQFalse);
        sq_settypetag(v,-1,(void*)sq_minizip_unzip_TAG);
        sq_insert_reg_funcs(v, sq_minizip_unzip_methods);
        sq_newslot(v,-3,SQTrue);

        sq_newslot(v,-3,SQTrue); //push zlib table
        return 0;
    }
Пример #28
0
void sq_base_register(HSQUIRRELVM v)
{
	SQInteger i=0;
	sq_pushroottable(v);
	while(base_funcs[i].name!=0) {
		sq_pushstring(v,base_funcs[i].name,-1);
		sq_newclosure(v,base_funcs[i].f,0);
		sq_setnativeclosurename(v,-1,base_funcs[i].name);
		sq_setparamscheck(v,base_funcs[i].nparamscheck,base_funcs[i].typemask);
		sq_newslot(v,-3, SQFalse);
		i++;
	}
	
	sq_pushstring(v,_SC("_versionnumber_"),-1);
	sq_pushinteger(v,SQUIRREL_VERSION_NUMBER);
	sq_newslot(v,-3, SQFalse);
	sq_pushstring(v,_SC("_version_"),-1);
	sq_pushstring(v,SQUIRREL_VERSION,-1);
	sq_newslot(v,-3, SQFalse);
	sq_pushstring(v,_SC("_charsize_"),-1);
	sq_pushinteger(v,sizeof(SQChar));
	sq_newslot(v,-3, SQFalse);
	sq_pushstring(v,_SC("_intsize_"),-1);
	sq_pushinteger(v,sizeof(SQInteger));
	sq_newslot(v,-3, SQFalse);
	sq_pushstring(v,_SC("_floatsize_"),-1);
	sq_pushinteger(v,sizeof(SQFloat));
	sq_newslot(v,-3, SQFalse);
	sq_pop(v,1);
}
Пример #29
0
SQInteger regGlobals(HSQUIRRELVM v) {
    SQInteger i=0;
    SQRegFunction* pfpps = global_funcs;
    while(pfpps[i].name!=0) {
        sq_pushstring(v,pfpps[i].name,-1);
        sq_newclosure(v,pfpps[i].f,0);
        sq_setparamscheck(v,pfpps[i].nparamscheck,pfpps[i].typemask);
        sq_setnativeclosurename(v,-1,pfpps[i].name);
        sq_newslot(v,-3,SQFalse);
        i++;
    }
    return 1;
}
Пример #30
0
 //-----------------------------------------------------------------
 bool RegisterFunctions(HSQUIRRELVM v, const Function* functions, bool areStatic)
 {
     assert(functions);
     for (int i = 0; functions[i].name != 0; i++) {
         sq_pushstring(v, functions[i].name, -1);
         sq_newclosure(v, functions[i].function, 0);
         sq_setnativeclosurename(v, -1, functions[i].debugName);
         if (!SQ_SUCCEEDED(sq_newslot(v, -3, (areStatic ? SQTrue : SQFalse)))) {
             return false;
         }
     }
     return true;
 }