/usr/include/luabind/detail
NameSizeModeActions
call.hpp91580644editdlrm
call_function.hpp187260644editdlrm
call_member.hpp137210644editdlrm
call_operator_iterate.hpp21940644editdlrm
class_registry.hpp29400644editdlrm
class_rep.hpp62350644editdlrm
constructor.hpp36910644editdlrm
convert_to_lua.hpp29240644editdlrm
debug.hpp22730644editdlrm
decorate_type.hpp65920644editdlrm
deduce_signature.hpp20160644editdlrm
enum_maker.hpp35420644editdlrm
format_signature.hpp36090644editdlrm
garbage_collector.hpp18620644editdlrm
has_get_pointer.hpp29600644editdlrm
inheritance.hpp41970644editdlrm
instance_holder.hpp31080644editdlrm
link_compatibility.hpp19940644editdlrm
make_instance.hpp28110644editdlrm
most_derived.hpp16020644editdlrm
object.hpp333940644editdlrm
object_call.hpp18990644editdlrm
object_rep.hpp44710644editdlrm
operator_id.hpp24650644editdlrm
other.hpp32900644editdlrm
pcall.hpp14580644editdlrm
pointee_sizeof.hpp18400644editdlrm
policy.hpp283400644editdlrm
primitives.hpp18560644editdlrm
property.hpp7820644editdlrm
signature_match.hpp21710644editdlrm
stack_utils.hpp16400644editdlrm
typetraits.hpp54390644editdlrm
yes_no.hpp13240644editdlrm
Edit: /usr/include/luabind/detail/inheritance.hpp (4197B)
// 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_INHERITANCE_090217_HPP # define LUABIND_INHERITANCE_090217_HPP # include # include # include # include # include # include # include namespace luabind { namespace detail { LUABIND_API extern char classid_map_tag; LUABIND_API extern char class_map_tag; extern char cast_graph_tag; // Not used in headers, thus no LUABIND_API. typedef void*(*cast_function)(void*); typedef std::size_t class_id; class_id const unknown_class = (std::numeric_limits::max)(); class class_rep; class LUABIND_API cast_graph { public: cast_graph(); ~cast_graph(); // `src` and `p` here describe the *most derived* object. This means that // for a polymorphic type, the pointer must be cast with // dynamic_cast before being passed in here, and `src` has to // match typeid(*p). std::pair cast( void* p, class_id src, class_id target , class_id dynamic_id, void const* dynamic_ptr) const; void insert(class_id src, class_id target, cast_function cast); private: class impl; boost::scoped_ptr m_impl; }; // Maps a type_id to a class_id. Note that this actually partitions the // id-space into two, using one half for "local" ids; ids that are used only as // keys into the conversion cache. This is needed because we need a unique key // even for types that hasn't been registered explicitly. class LUABIND_API class_id_map { public: class_id_map(); class_id get(type_id const& type) const; class_id get_local(type_id const& type); void put(class_id id, type_id const& type); private: typedef std::map map_type; map_type m_classes; class_id m_local_id; static class_id const local_id_base; }; inline class_id_map::class_id_map() : m_local_id(local_id_base) {} inline class_id class_id_map::get(type_id const& type) const { map_type::const_iterator i = m_classes.find(type); if (i == m_classes.end() || i->second >= local_id_base) return unknown_class; return i->second; } inline class_id class_id_map::get_local(type_id const& type) { std::pair result = m_classes.insert( std::make_pair(type, 0)); if (result.second) result.first->second = m_local_id++; assert(m_local_id >= local_id_base); return result.first->second; } inline void class_id_map::put(class_id id, type_id const& type) { assert(id < local_id_base); std::pair result = m_classes.insert( std::make_pair(type, 0)); assert( result.second || result.first->second == id || result.first->second >= local_id_base ); result.first->second = id; } class class_map { public: class_rep* get(class_id id) const; void put(class_id id, class_rep* cls); private: std::vector m_classes; }; inline class_rep* class_map::get(class_id id) const { if (id >= m_classes.size()) return 0; return m_classes[id]; } inline void class_map::put(class_id id, class_rep* cls) { if (id >= m_classes.size()) m_classes.resize(id + 1); m_classes[id] = cls; } template struct static_cast_ { static void* execute(void* p) { return static_cast(static_cast(p)); } }; template struct dynamic_cast_ { static void* execute(void* p) { return dynamic_cast(static_cast(p)); } }; // Thread safe class_id allocation. LUABIND_API class_id allocate_class_id(type_id const& cls); template struct registered_class { static class_id const id; }; template class_id const registered_class::id = allocate_class_id(typeid(T)); template struct registered_class : registered_class {}; }} // namespace luabind::detail #endif // LUABIND_INHERITANCE_090217_HPP