Chris@16
|
1 // (C) Copyright Gennadiy Rozental 2005-2008.
|
Chris@16
|
2 // Distributed under the Boost Software License, Version 1.0.
|
Chris@16
|
3 // (See accompanying file LICENSE_1_0.txt or copy at
|
Chris@16
|
4 // http://www.boost.org/LICENSE_1_0.txt)
|
Chris@16
|
5
|
Chris@16
|
6 // See http://www.boost.org/libs/test for the library home page.
|
Chris@16
|
7 //
|
Chris@16
|
8 // File : $RCSfile$
|
Chris@16
|
9 //
|
Chris@101
|
10 // Version : $Revision$
|
Chris@16
|
11 //
|
Chris@16
|
12 // Description : simple facilities for accessing type information at runtime
|
Chris@16
|
13 // ***************************************************************************
|
Chris@16
|
14
|
Chris@16
|
15 #ifndef BOOST_TEST_RTTI_HPP_062604GER
|
Chris@16
|
16 #define BOOST_TEST_RTTI_HPP_062604GER
|
Chris@16
|
17
|
Chris@16
|
18 #include <cstddef>
|
Chris@16
|
19
|
Chris@16
|
20 namespace boost {
|
Chris@16
|
21
|
Chris@16
|
22 namespace rtti {
|
Chris@16
|
23
|
Chris@16
|
24 // ************************************************************************** //
|
Chris@16
|
25 // ************** rtti::type_id ************** //
|
Chris@16
|
26 // ************************************************************************** //
|
Chris@16
|
27
|
Chris@16
|
28 typedef std::ptrdiff_t id_t;
|
Chris@16
|
29
|
Chris@16
|
30 namespace rtti_detail {
|
Chris@16
|
31
|
Chris@16
|
32 template<typename T>
|
Chris@16
|
33 struct rttid_holder {
|
Chris@16
|
34 static id_t id() { return reinterpret_cast<id_t>( &inst() ); }
|
Chris@16
|
35
|
Chris@16
|
36 private:
|
Chris@16
|
37 struct rttid {};
|
Chris@16
|
38
|
Chris@16
|
39 static rttid const& inst() { static rttid s_inst; return s_inst; }
|
Chris@16
|
40 };
|
Chris@16
|
41
|
Chris@16
|
42 } // namespace rtti_detail
|
Chris@16
|
43
|
Chris@16
|
44 //____________________________________________________________________________//
|
Chris@16
|
45
|
Chris@16
|
46 template<typename T>
|
Chris@16
|
47 inline id_t
|
Chris@16
|
48 type_id()
|
Chris@16
|
49 {
|
Chris@16
|
50 return rtti_detail::rttid_holder<T>::id();
|
Chris@16
|
51 }
|
Chris@16
|
52
|
Chris@16
|
53 //____________________________________________________________________________//
|
Chris@16
|
54
|
Chris@16
|
55 #define BOOST_RTTI_SWITCH( type_id_ ) if( ::boost::rtti::id_t switch_by_id = type_id_ )
|
Chris@16
|
56 #define BOOST_RTTI_CASE( type ) if( switch_by_id == ::boost::rtti::type_id<type>() )
|
Chris@16
|
57
|
Chris@16
|
58 //____________________________________________________________________________//
|
Chris@16
|
59
|
Chris@16
|
60 } // namespace rtti
|
Chris@16
|
61
|
Chris@16
|
62 } // namespace boost
|
Chris@16
|
63
|
Chris@16
|
64 #endif // BOOST_RT_RTTI_HPP_062604GER
|