Initial commit, includes Lua with broken Luabind as a backup for branching purposes
[terrastrategy.git] / include / luabind / make_function.hpp
blob0bfed63319cbbf3d4ac4c6e4d9ab9326509751b5
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>
17 namespace luabind {
19 namespace detail
22 template <class F, class Signature, class Policies>
23 struct function_invoke
25 function_invoke(F f)
26 : f(f)
29 int operator()(lua_State* L) const
31 return invoke(L, f, Signature(), Policies());
34 F f;
37 template <class Signature, class Policies>
38 struct function_score
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());
52 return 0;
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(
60 lua_State*, int
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&);
68 } // namespace detail
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>()
82 template <class F>
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