/
usr
/
include
/
luabind
/
detail
/
/usr/include/luabind/detail
mkdir
upload
Name
Size
Mode
Actions
call.hpp
9158
0644
edit
dl
rm
call_function.hpp
18726
0644
edit
dl
rm
call_member.hpp
13721
0644
edit
dl
rm
call_operator_iterate.hpp
2194
0644
edit
dl
rm
class_registry.hpp
2940
0644
edit
dl
rm
class_rep.hpp
6235
0644
edit
dl
rm
constructor.hpp
3691
0644
edit
dl
rm
convert_to_lua.hpp
2924
0644
edit
dl
rm
debug.hpp
2273
0644
edit
dl
rm
decorate_type.hpp
6592
0644
edit
dl
rm
deduce_signature.hpp
2016
0644
edit
dl
rm
enum_maker.hpp
3542
0644
edit
dl
rm
format_signature.hpp
3609
0644
edit
dl
rm
garbage_collector.hpp
1862
0644
edit
dl
rm
has_get_pointer.hpp
2960
0644
edit
dl
rm
inheritance.hpp
4197
0644
edit
dl
rm
instance_holder.hpp
3108
0644
edit
dl
rm
link_compatibility.hpp
1994
0644
edit
dl
rm
make_instance.hpp
2811
0644
edit
dl
rm
most_derived.hpp
1602
0644
edit
dl
rm
object.hpp
33394
0644
edit
dl
rm
object_call.hpp
1899
0644
edit
dl
rm
object_rep.hpp
4471
0644
edit
dl
rm
operator_id.hpp
2465
0644
edit
dl
rm
other.hpp
3290
0644
edit
dl
rm
pcall.hpp
1458
0644
edit
dl
rm
pointee_sizeof.hpp
1840
0644
edit
dl
rm
policy.hpp
28340
0644
edit
dl
rm
primitives.hpp
1856
0644
edit
dl
rm
property.hpp
782
0644
edit
dl
rm
signature_match.hpp
2171
0644
edit
dl
rm
stack_utils.hpp
1640
0644
edit
dl
rm
typetraits.hpp
5439
0644
edit
dl
rm
yes_no.hpp
1324
0644
edit
dl
rm
Edit:
/usr/include/luabind/detail/make_instance.hpp
(2811B)
// 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) #ifndef LUABIND_DETAIL_MAKE_INSTANCE_090310_HPP # define LUABIND_DETAIL_MAKE_INSTANCE_090310_HPP # include <luabind/detail/inheritance.hpp> # include <luabind/detail/object_rep.hpp> # include <boost/type_traits/is_polymorphic.hpp> namespace luabind { namespace detail { template <class T> std::pair<class_id, void*> get_dynamic_class_aux( lua_State* L, T const* p, mpl::true_) { lua_rawgetp(L, LUA_REGISTRYINDEX, &classid_map_tag); class_id_map& class_ids = *static_cast<class_id_map*>( lua_touserdata(L, -1)); lua_pop(L, 1); return std::make_pair( class_ids.get_local(typeid(*p)) , dynamic_cast<void*>(const_cast<T*>(p)) ); } template <class T> std::pair<class_id, void*> get_dynamic_class_aux( lua_State*, T const* p, mpl::false_) { return std::make_pair( registered_class<T>::id, static_cast<void*>(const_cast<T*>(p))); } template <class T> std::pair<class_id, void*> get_dynamic_class(lua_State* L, T* p) { return get_dynamic_class_aux(L, p, boost::is_polymorphic<T>()); } template <class T> class_rep* get_pointee_class(class_map const& classes, T*) { return classes.get(registered_class<T>::id); } template <class P> class_rep* get_pointee_class(lua_State* L, P const& p, class_id dynamic_id) { lua_rawgetp(L, LUA_REGISTRYINDEX, &class_map_tag); class_map const& classes = *static_cast<class_map*>( lua_touserdata(L, -1)); lua_pop(L, 1); class_rep* cls = classes.get(dynamic_id); if (!cls) cls = get_pointee_class(classes, get_pointer(p)); return cls; } // Create an appropriate instance holder for the given pointer like object. template <class P> void make_instance(lua_State* L, P p) { std::pair<class_id, void*> dynamic = get_dynamic_class(L, get_pointer(p)); class_rep* cls = get_pointee_class(L, p, dynamic.first); if (!cls) { throw std::runtime_error("Trying to use unregistered class"); } object_rep* instance = push_new_instance(L, cls); typedef pointer_holder<P> holder_type; void* storage = instance->allocate(sizeof(holder_type)); try { #ifdef LUABIND_USE_CXX11 new (storage) holder_type(std::move(p), dynamic.first, dynamic.second); #else new (storage) holder_type(p, dynamic.first, dynamic.second); #endif } catch (...) { instance->deallocate(storage); lua_pop(L, 1); throw; } instance->set_instance(static_cast<holder_type*>(storage)); } }} // namespace luabind::detail #endif // LUABIND_DETAIL_MAKE_INSTANCE_090310_HPP
Save
cmd:
run