1 // Copyright Daniel Wallin 2008. Use, modification and distribution is
2 // subject to the Boost Software License, Version 1.0. (See accompanying
3 // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
5 #ifndef LUABIND_MAKE_FUNCTION_081014_HPP
6 # define LUABIND_MAKE_FUNCTION_081014_HPP
8 # include <luabind/config.hpp>
9 # include <luabind/object.hpp>
10 # include <luabind/detail/call.hpp>
11 # include <luabind/detail/compute_score.hpp>
12 # include <luabind/detail/deduce_signature.hpp>
13 # include <luabind/detail/format_signature.hpp>
15 # include <boost/function/function1.hpp>
22 template <class F
, class Signature
, class Policies
>
23 struct function_invoke
29 int operator()(lua_State
* L
) const
31 return invoke(L
, f
, Signature(), Policies());
37 template <class Signature
, class Policies
>
40 int operator()(lua_State
* L
) const
42 return compute_score(L
, Signature(), Policies());
46 template <class Signature
>
47 struct function_signature
49 int operator()(lua_State
* L
, char const* function
) const
51 format_signature(L
, function
, Signature());
56 typedef boost::function1
<int, lua_State
*> function_callback
;
57 typedef boost::function2
<int, lua_State
*, char const*> signature_callback
;
59 LUABIND_API object
make_function_aux(
61 , function_callback
const& call
62 , function_callback
const& score
63 , signature_callback
const& signature
66 LUABIND_API
void add_overload(object
const&, char const*, object
const&);
70 template <class F
, class Signature
, class Policies
>
71 object
make_function(lua_State
* L
, F f
, Signature
, Policies
)
73 return detail::make_function_aux(
75 , detail::compute_arity(Signature(), Policies())
76 , detail::function_invoke
<F
, Signature
, Policies
>(f
)
77 , detail::function_score
<Signature
, Policies
>()
78 , detail::function_signature
<Signature
>()
83 object
make_function(lua_State
* L
, F f
)
85 return make_function(L
, detail::deduce_signature(f
), detail::null_type());
88 } // namespace luabind
90 #endif // LUABIND_MAKE_FUNCTION_081014_HPP