MCPcopy Create free account
hub / github.com/Norbyte/ositools / Query

Method Query

OsiInterface/LuaBinding.cpp/LuaBinding.cpp:377–420  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

375 }
376
377 static int Query(lua_State * L)
378 {
379 int numArgs = lua_gettop(L);
380 if (numArgs < 1) {
381 luaL_error(L, "Osiris query has no function data!");
382 }
383
384 auto signature = LuaOsiSignature::TypeCheck(L, 1);
385 if (signature->type != FunctionType::Query) {
386 luaL_error(L, "Expected a Query node");
387 }
388
389 if (numArgs - 1 != signature->numInputArgs) {
390 luaL_error(L, "Incorrect number of arguments for query '%s'; expected %d, got %d",
391 signature->name.c_str(), signature->numInputArgs, numArgs - 1);
392 }
393
394 OsiArgumentListPin args(signature->numArgs);
395 uint32_t inputArg = 2;
396 for (uint32_t i = 0; i < signature->numArgs; i++) {
397 if (signature->args[i].output) {
398 args.Args()[i].Value.TypeId = signature->args[i].type;
399 } else {
400 LuaToOsiArg(L, inputArg++, args.Args()[i], signature->args[i]);
401 }
402 }
403
404 bool handled = gOsirisProxy->GetWrappers().Query.CallWithHooks(signature->functionHandle, args.Args());
405 uint32_t numOutputs = signature->numArgs - signature->numInputArgs;
406 if (handled) {
407 for (uint32_t i = 0; i < signature->numArgs; i++) {
408 if (signature->args[i].output) {
409 OsiToLuaArg(L, args.Args()[i]);
410 numOutputs++;
411 }
412 }
413 } else {
414 for (uint32_t i = 0; i < signature->numArgs - signature->numInputArgs; i++) {
415 lua_pushnil(L);
416 }
417 }
418
419 return signature->numArgs - signature->numInputArgs;
420 }
421
422 private:
423 OsiArgumentPool argumentPool_;

Callers

nothing calls this directly

Calls 2

ArgsMethod · 0.80
CallWithHooksMethod · 0.45

Tested by

no test coverage detected