|
@@ -567,6 +567,14 @@ namespace engineAPI{
|
|
|
|
|
|
using SeqType = typename Gens<sizeof...(ArgTs)>::type;
|
|
using SeqType = typename Gens<sizeof...(ArgTs)>::type;
|
|
};
|
|
};
|
|
|
|
+
|
|
|
|
+ struct MarshallHelpers {
|
|
|
|
+ template<typename ...ArgTs> static void marshallEach(S32 &argc, ConsoleValueRef *argv, const ArgTs& ...args){}
|
|
|
|
+ template<typename H, typename ...Tail> static void marshallEach(S32 &argc, ConsoleValueRef *argv, const H& head, const Tail& ...tail){
|
|
|
|
+ EngineMarshallData(head, argc, argv);
|
|
|
|
+ marshallEach(argc, argv, tail...);
|
|
|
|
+ }
|
|
|
|
+ };
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1165,6 +1173,8 @@ public:
|
|
// Base helper for console callbacks
|
|
// Base helper for console callbacks
|
|
struct _EngineConsoleCallbackHelper : public _BaseEngineConsoleCallbackHelper
|
|
struct _EngineConsoleCallbackHelper : public _BaseEngineConsoleCallbackHelper
|
|
{
|
|
{
|
|
|
|
+private:
|
|
|
|
+ using Helper = engineAPI::detail::MarshallHelpers;
|
|
public:
|
|
public:
|
|
|
|
|
|
_EngineConsoleCallbackHelper( StringTableEntry callbackName, SimObject* pThis )
|
|
_EngineConsoleCallbackHelper( StringTableEntry callbackName, SimObject* pThis )
|
|
@@ -1173,1465 +1183,121 @@ public:
|
|
mArgc = mInitialArgc = pThis ? 2 : 1 ;
|
|
mArgc = mInitialArgc = pThis ? 2 : 1 ;
|
|
mCallbackName = callbackName;
|
|
mCallbackName = callbackName;
|
|
}
|
|
}
|
|
-
|
|
|
|
- template< typename R >
|
|
|
|
- R call()
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- template< typename R, typename A >
|
|
|
|
- R call( A a )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+1, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+1, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B >
|
|
|
|
- R call( A a, B b )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+2, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+2, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C >
|
|
|
|
- R call( A a, B b, C c )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+3, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+3, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D >
|
|
|
|
- R call( A a, B b, C c, D d )
|
|
|
|
|
|
+
|
|
|
|
+ template< typename R, typename ...ArgTs >
|
|
|
|
+ R call(ArgTs ...args)
|
|
{
|
|
{
|
|
if (Con::isMainThread())
|
|
if (Con::isMainThread())
|
|
{
|
|
{
|
|
ConsoleStackFrameSaver sav; sav.save();
|
|
ConsoleStackFrameSaver sav; sav.save();
|
|
- CSTK.reserveValues(mArgc+4, mArgv);
|
|
|
|
|
|
+ CSTK.reserveValues(mArgc + sizeof...(ArgTs), mArgv);
|
|
mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ Helper::marshallEach(mArgc, mArgv, args...);
|
|
|
|
+
|
|
return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
SimConsoleThreadExecCallback cb;
|
|
SimConsoleThreadExecCallback cb;
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+4, NULL, false, &cb);
|
|
|
|
|
|
+ SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc + sizeof...(ArgTs), NULL, false, &cb);
|
|
evt->populateArgs(mArgv);
|
|
evt->populateArgs(mArgv);
|
|
mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ Helper::marshallEach(mArgc, mArgv, args...);
|
|
|
|
+
|
|
Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
|
|
return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E >
|
|
|
|
- R call( A a, B b, C c, D d, E e )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+5, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+5, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
|
|
+};
|
|
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
|
|
+// Override for when first parameter is presumably a SimObject*, in which case A will be absorbed as the callback
|
|
|
|
+template<typename P1> struct _EngineConsoleExecCallbackHelper : public _BaseEngineConsoleCallbackHelper
|
|
|
|
+{
|
|
|
|
+private:
|
|
|
|
+ using Helper = engineAPI::detail::MarshallHelpers;
|
|
|
|
+public:
|
|
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f )
|
|
|
|
|
|
+ _EngineConsoleExecCallbackHelper( SimObject* pThis )
|
|
{
|
|
{
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+6, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+6, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
|
|
+ mThis = pThis;
|
|
|
|
+ mArgc = mInitialArgc = 2;
|
|
|
|
+ mCallbackName = NULL;
|
|
}
|
|
}
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+7, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+7, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h )
|
|
|
|
|
|
+ template< typename R, typename SCB, typename ...ArgTs >
|
|
|
|
+ R call( SCB simCB , ArgTs ...args )
|
|
{
|
|
{
|
|
if (Con::isMainThread())
|
|
if (Con::isMainThread())
|
|
{
|
|
{
|
|
ConsoleStackFrameSaver sav; sav.save();
|
|
ConsoleStackFrameSaver sav; sav.save();
|
|
- CSTK.reserveValues(mArgc+8, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
|
|
+ CSTK.reserveValues(mArgc+sizeof...(ArgTs), mArgv);
|
|
|
|
+ mArgv[ 0 ].value->setStackStringValue(simCB);
|
|
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
|
|
+ Helper::marshallEach(mArgc, mArgv, args...);
|
|
|
|
|
|
return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
SimConsoleThreadExecCallback cb;
|
|
SimConsoleThreadExecCallback cb;
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+8, NULL, false, &cb);
|
|
|
|
|
|
+ SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+sizeof...(ArgTs), NULL, true, &cb);
|
|
evt->populateArgs(mArgv);
|
|
evt->populateArgs(mArgv);
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
|
|
+ mArgv[ 0 ].value->setStackStringValue(simCB);
|
|
|
|
+
|
|
|
|
+ Helper::marshallEach(mArgc, mArgv, args...);
|
|
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
|
|
+ Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
|
|
return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+9, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+9, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
|
|
+};
|
|
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j )
|
|
|
|
|
|
+// Override for when first parameter is const char*
|
|
|
|
+template<> struct _EngineConsoleExecCallbackHelper<const char*> : public _BaseEngineConsoleCallbackHelper
|
|
|
|
+{
|
|
|
|
+private:
|
|
|
|
+ using Helper = engineAPI::detail::MarshallHelpers;
|
|
|
|
+public:
|
|
|
|
+ _EngineConsoleExecCallbackHelper( const char *callbackName )
|
|
{
|
|
{
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+10, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+10, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
|
|
+ mThis = NULL;
|
|
|
|
+ mArgc = mInitialArgc = 1;
|
|
|
|
+ mCallbackName = StringTable->insert(callbackName);
|
|
}
|
|
}
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+11, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+11, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l )
|
|
|
|
|
|
+ template< typename R, typename ...ArgTs >
|
|
|
|
+ R call(ArgTs ...args)
|
|
{
|
|
{
|
|
if (Con::isMainThread())
|
|
if (Con::isMainThread())
|
|
{
|
|
{
|
|
ConsoleStackFrameSaver sav; sav.save();
|
|
ConsoleStackFrameSaver sav; sav.save();
|
|
- CSTK.reserveValues(mArgc+12, mArgv);
|
|
|
|
|
|
+ CSTK.reserveValues(mArgc+sizeof...(ArgTs), mArgv);
|
|
mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( l, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
|
|
+
|
|
|
|
+ Helper::marshallEach(mArgc, mArgv, args...);
|
|
|
|
+
|
|
return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
}
|
|
}
|
|
else
|
|
else
|
|
{
|
|
{
|
|
SimConsoleThreadExecCallback cb;
|
|
SimConsoleThreadExecCallback cb;
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+12, NULL, false, &cb);
|
|
|
|
|
|
+ SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+sizeof...(ArgTs), NULL, false, &cb);
|
|
evt->populateArgs(mArgv);
|
|
evt->populateArgs(mArgv);
|
|
mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( l, mArgc, mArgv );
|
|
|
|
|
|
+
|
|
|
|
+ Helper::marshallEach(mArgc, mArgv, args...);
|
|
|
|
|
|
Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
-
|
|
|
|
return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
}
|
|
}
|
|
- }
|
|
|
|
-
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-// Override for when first parameter is presumably a SimObject*, in which case A will be absorbed as the callback
|
|
|
|
-template<typename P1> struct _EngineConsoleExecCallbackHelper : public _BaseEngineConsoleCallbackHelper
|
|
|
|
-{
|
|
|
|
-public:
|
|
|
|
-
|
|
|
|
- _EngineConsoleExecCallbackHelper( SimObject* pThis )
|
|
|
|
- {
|
|
|
|
- mThis = pThis;
|
|
|
|
- mArgc = mInitialArgc = 2;
|
|
|
|
- mCallbackName = NULL;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- template< typename R, typename A >
|
|
|
|
- R call( A a )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+0, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+0, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B >
|
|
|
|
- R call( A a, B b )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+1, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+1, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C >
|
|
|
|
- R call( A a, B b, C c )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+2, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+2, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D >
|
|
|
|
- R call( A a, B b, C c, D d )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+3, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+3, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E >
|
|
|
|
- R call( A a, B b, C c, D d, E e )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+4, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+4, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+5, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+5, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+6, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+6, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+7, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+7, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+8, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+8, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+9, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+9, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+10, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+10, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+11, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( l, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+11, NULL, true, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(a);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( l, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent(mThis, evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-};
|
|
|
|
-
|
|
|
|
-// Override for when first parameter is const char*
|
|
|
|
-template<> struct _EngineConsoleExecCallbackHelper<const char*> : public _BaseEngineConsoleCallbackHelper
|
|
|
|
-{
|
|
|
|
- _EngineConsoleExecCallbackHelper( const char *callbackName )
|
|
|
|
- {
|
|
|
|
- mThis = NULL;
|
|
|
|
- mArgc = mInitialArgc = 1;
|
|
|
|
- mCallbackName = StringTable->insert(callbackName);
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R >
|
|
|
|
- R call()
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
-
|
|
|
|
-
|
|
|
|
- template< typename R, typename A >
|
|
|
|
- R call( A a )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+1, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+1, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B >
|
|
|
|
- R call( A a, B b )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+2, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+2, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C >
|
|
|
|
- R call( A a, B b, C c )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+3, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+3, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D >
|
|
|
|
- R call( A a, B b, C c, D d )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+4, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+4, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E >
|
|
|
|
- R call( A a, B b, C c, D d, E e )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+5, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+5, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+6, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+6, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+7, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+7, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+8, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+8, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+9, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+9, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+10, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+10, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+11, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+11, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- template< typename R, typename A, typename B, typename C, typename D, typename E, typename F, typename G, typename H, typename I, typename J, typename K, typename L >
|
|
|
|
- R call( A a, B b, C c, D d, E e, F f, G g, H h, I i, J j, K k, L l )
|
|
|
|
- {
|
|
|
|
- if (Con::isMainThread())
|
|
|
|
- {
|
|
|
|
- ConsoleStackFrameSaver sav; sav.save();
|
|
|
|
- CSTK.reserveValues(mArgc+12, mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( l, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( _exec() ) );
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- SimConsoleThreadExecCallback cb;
|
|
|
|
- SimConsoleThreadExecEvent *evt = new SimConsoleThreadExecEvent(mArgc+12, NULL, false, &cb);
|
|
|
|
- evt->populateArgs(mArgv);
|
|
|
|
- mArgv[ 0 ].value->setStackStringValue(mCallbackName);
|
|
|
|
-
|
|
|
|
- EngineMarshallData( a, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( b, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( c, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( d, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( e, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( f, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( g, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( h, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( i, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( j, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( k, mArgc, mArgv );
|
|
|
|
- EngineMarshallData( l, mArgc, mArgv );
|
|
|
|
-
|
|
|
|
- Sim::postEvent((SimObject*)Sim::getRootGroup(), evt, Sim::getCurrentTime());
|
|
|
|
-
|
|
|
|
- return R( EngineUnmarshallData< R >()( cb.waitForResult() ) );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ }
|
|
};
|
|
};
|
|
|
|
|
|
// Re-enable some VC warnings we disabled for this file.
|
|
// Re-enable some VC warnings we disabled for this file.
|