📄 call.hpp
字号:
int nargs = lua_gettop(L);
typedef typename find_conversion_policy<0, Policies>::type converter_policy_ret;
typename converter_policy_ret::template generate_converter<T, cpp_to_lua>::type converter_ret;
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_DECL, _)
converter_ret.apply(L, f
(
*obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_PARAMS, _)
));
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POSTCALL, _)
int nret = lua_gettop(L) - nargs;
const int indices[] =
{
1 /* self */,
nargs + nret /* result */
BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), LUABIND_INDEX_MAP, _)
};
policy_list_postcall<Policies>::apply(L, indices);
// return nret;
return maybe_yield<Policies>::apply(L, nret);
}
template<class C, class Policies BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
static int call(T(*f)(const C& obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), C* obj, lua_State* L, const Policies*)
{
int nargs = lua_gettop(L);
typedef typename find_conversion_policy<0, Policies>::type converter_policy_ret;
typename converter_policy_ret::template generate_converter<T, cpp_to_lua>::type converter_ret;
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_DECL, _)
converter_ret.apply(L, f
(
*obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_PARAMS, _)
));
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POSTCALL, _)
int nret = lua_gettop(L) - nargs;
const int indices[] =
{
1 /* self */,
nargs + nret /* result */
BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), LUABIND_INDEX_MAP, _)
};
policy_list_postcall<Policies>::apply(L, indices);
// return nret;
return maybe_yield<Policies>::apply(L, nret);
}
#elif BOOST_PP_ITERATION_FLAGS() == 2
template<class C, class Policies BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
static int call(void(C::*f)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), C* obj, lua_State* L, const Policies*)
{
int nargs = lua_gettop(L);
L = L; // L is used, but metrowerks compiler seem to warn about it before expanding the macros
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_DECL, _)
(obj->*f)
(
BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_PARAMS, _)
);
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POSTCALL, _)
int nret = lua_gettop(L) - nargs;
const int indices[] =
{
1 /* self */,
nargs + nret /* result */
BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), LUABIND_INDEX_MAP, _)
};
policy_list_postcall<Policies>::apply(L, indices);
// return nret;
return maybe_yield<Policies>::apply(L, nret);
}
template<class C, class Policies BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
static int call(void(C::*f)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)) const, C* obj, lua_State* L, const Policies*)
{
int nargs = lua_gettop(L);
L = L; // L is used, but metrowerks compiler seem to warn about it before expanding the macros
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_DECL, _)
(obj->*f)
(
BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_PARAMS, _)
);
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POSTCALL, _)
int nret = lua_gettop(L) - nargs;
const int indices[] =
{
1 /* self */,
nargs + nret /* result */
BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), LUABIND_INDEX_MAP, _)
};
policy_list_postcall<Policies>::apply(L, indices);
// return nret;
return maybe_yield<Policies>::apply(L, nret);
}
template<class C, class Policies BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
static int call(void(*f)(C* obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), C* obj, lua_State* L, const Policies*)
{
int nargs = lua_gettop(L);
L = L; // L is used, but metrowerks compiler seem to warn about it before expanding the macros
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_DECL, _)
f(
obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_PARAMS, _)
);
int nret = lua_gettop(L) - nargs;
const int indices[] =
{
1 /* self */,
nargs + nret /* result */
BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), LUABIND_INDEX_MAP, _)
};
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POSTCALL, _)
policy_list_postcall<Policies>::apply(L, indices);
// return nret;
return maybe_yield<Policies>::apply(L, nret);
}
template<class C, class Policies BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
static int call(void(*f)(C& obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), C* obj, lua_State* L, const Policies*)
{
int nargs = lua_gettop(L);
L = L; // L is used, but metrowerks compiler seem to warn about it before expanding the macros
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_DECL, _)
f(
*obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_PARAMS, _)
);
int nret = lua_gettop(L) - nargs;
const int indices[] =
{
1 /* self */,
nargs + nret /* result */
BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), LUABIND_INDEX_MAP, _)
};
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POSTCALL, _)
policy_list_postcall<Policies>::apply(L, indices);
// return nret;
return maybe_yield<Policies>::apply(L, nret);
}
template<class C, class Policies BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
static int call(void(*f)(const C& obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), C* obj, lua_State* L, const Policies*)
{
int nargs = lua_gettop(L);
L = L; // L is used, but metrowerks compiler seem to warn about it before expanding the macros
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_DECL, _)
f(
*obj BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM(BOOST_PP_ITERATION(), LUABIND_PARAMS, _)
);
BOOST_PP_REPEAT(BOOST_PP_ITERATION(), LUABIND_POSTCALL, _)
int nret = lua_gettop(L) - nargs;
const int indices[] =
{
1 /* self */,
nargs + nret /* result */
BOOST_PP_ENUM_TRAILING(BOOST_PP_ITERATION(), LUABIND_INDEX_MAP, _)
};
policy_list_postcall<Policies>::apply(L, indices);
// return nret;
return maybe_yield<Policies>::apply(L, nret);
}
#elif BOOST_PP_ITERATION_FLAGS() == 3
template<class T, class Policies, class R BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
int call(R(*f)(T& BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), T* obj, lua_State* L, const Policies* policies)
{
return returns<R>::call(f, obj, L, policies);
}
template<class T, class Policies, class R BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
int call(R(*f)(const T& BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), T* obj, lua_State* L, const Policies* policies)
{
return returns<R>::call(f, obj, L, policies);
}
template<class T, class Policies, class R BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
int call(R(*f)(T* BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), T* obj, lua_State* L, const Policies* policies)
{
return returns<R>::call(f, obj, L, policies);
}
template<class T, class Policies, class R BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
int call(R(*f)(const T* BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), T* obj, lua_State* L, const Policies* policies)
{
return returns<R>::call(f, obj, L, policies);
}
template<class T, class Policies, class R BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
int call(R(T::*f)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)), T* obj, lua_State* L, const Policies* policies)
{
return returns<R>::call(f, obj, L, policies);
}
template<class T, class Policies, class R BOOST_PP_COMMA_IF(BOOST_PP_ITERATION()) BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), class A)>
int call(R(T::*f)(BOOST_PP_ENUM_PARAMS(BOOST_PP_ITERATION(), A)) const, T* obj, lua_State* L, const Policies* policies)
{
return returns<R>::call(f, obj, L, policies);
}
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -