1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
// Copyright Daniel Wallin 2009. Use, modification and distribution is
// subject to the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include "test.hpp"
#include <luabind/luabind.hpp>
struct X
{
X(int x, int y)
: x(x)
, y(y)
{}
int x;
int y;
};
namespace luabind {
int combine_score(int s1, int s2)
{
if (s1 < 0 || s2 < 0) return -1;
return s1 + s2;
}
template <>
struct default_converter<X>
: native_converter_base<X>
{
int const consumed_args(...)
{
return 2;
}
int compute_score(lua_State* L, int index)
{
return combine_score(
c1.compute_score(L, index), c2.compute_score(L, index + 1));
}
X from(lua_State* L, int index)
{
return X(lua_tonumber(L, index), lua_tonumber(L, index + 1));
}
default_converter<int> c1;
default_converter<int> c2;
};
} // namespace luabind
int take(X x)
{
return x.x + x.y;
}
void test_main(lua_State* L)
{
using namespace luabind;
module(L) [
def("take", &take)
];
DOSTRING(L,
"assert(take(1,1) == 2)\n"
"assert(take(2,3) == 5)\n"
);
}
|