5 #ifndef LUABIND_INHERITANCE_090217_HPP 6 # define LUABIND_INHERITANCE_090217_HPP 13 # include <luabind/typeid.hpp> 14 # include <boost/scoped_ptr.hpp> 16 namespace luabind {
namespace detail {
18 typedef void*(*cast_function)(
void*);
19 typedef std::size_t class_id;
21 class_id
const unknown_class = (std::numeric_limits<class_id>::max)();
35 std::pair<void*, int> cast(
36 void* p, class_id src, class_id target
37 , class_id dynamic_id,
void const* dynamic_ptr)
const;
38 void insert(class_id src, class_id target, cast_function cast);
42 boost::scoped_ptr<impl> m_impl;
54 class_id
get(
type_id const& type)
const;
55 class_id get_local(
type_id const& type);
56 void put(class_id
id,
type_id const& type);
59 typedef std::map<type_id, class_id> map_type;
63 static class_id
const local_id_base;
66 inline class_id_map::class_id_map()
67 : m_local_id(local_id_base)
70 inline class_id class_id_map::get(
type_id const& type)
const 72 map_type::const_iterator i = m_classes.find(type);
73 if (i == m_classes.end() || i->second >= local_id_base)
78 inline class_id class_id_map::get_local(
type_id const& type)
80 std::pair<map_type::iterator, bool> result = m_classes.insert(
81 std::make_pair(type, 0));
84 result.first->second = m_local_id++;
86 assert(m_local_id >= local_id_base);
88 return result.first->second;
91 inline void class_id_map::put(class_id
id,
type_id const& type)
93 assert(
id < local_id_base);
95 std::pair<map_type::iterator, bool> result = m_classes.insert(
96 std::make_pair(type, 0));
100 || result.first->second ==
id 101 || result.first->second >= local_id_base
104 result.first->second = id;
114 std::vector<class_rep*> m_classes;
117 inline class_rep* class_map::get(class_id
id)
const 119 if (
id >= m_classes.size())
121 return m_classes[id];
124 inline void class_map::put(class_id
id,
class_rep* cls)
126 if (
id >= m_classes.size())
127 m_classes.resize(
id + 1);
131 template <
class S,
class T>
134 static void* execute(
void* p)
136 return static_cast<T*
>(
static_cast<S*
>(p));
140 template <
class S,
class T>
143 static void* execute(
void* p)
145 return dynamic_cast<T*
>(
static_cast<S*
>(p));
150 LUABIND_API class_id allocate_class_id(
type_id const& cls);
155 static class_id
const id;
168 #endif // LUABIND_INHERITANCE_090217_HPP Definition: inheritance.hpp:141
Definition: typeid.hpp:22
Definition: inheritance.hpp:49
Definition: inheritance.hpp:132
Definition: inheritance.hpp:153
Definition: inheritance.cpp:108
Definition: PEtypes.h:507
Definition: inheritance.hpp:25
Definition: class_rep.hpp:68
Definition: inheritance.hpp:107