os/ossrv/ossrv_pub/boost_apis/boost/test/utils/rtti.hpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 //  (C) Copyright Gennadiy Rozental 2005.
     2 //  Distributed under the Boost Software License, Version 1.0.
     3 //  (See accompanying file LICENSE_1_0.txt or copy at 
     4 //  http://www.boost.org/LICENSE_1_0.txt)
     5 
     6 //  See http://www.boost.org/libs/test for the library home page.
     7 //
     8 //  File        : $RCSfile: rtti.hpp,v $
     9 //
    10 //  Version     : $Revision: 1.2 $
    11 //
    12 //  Description : simple facilities for accessing type information at runtime
    13 // ***************************************************************************
    14 
    15 #ifndef BOOST_TEST_RTTI_HPP_062604GER
    16 #define BOOST_TEST_RTTI_HPP_062604GER
    17 
    18 #include <cstddef>
    19 
    20 namespace boost {
    21 
    22 namespace rtti {
    23 
    24 // ************************************************************************** //
    25 // **************                   rtti::type_id              ************** //
    26 // ************************************************************************** //
    27 
    28 typedef std::ptrdiff_t id_t;
    29 
    30 namespace rtti_detail {
    31 
    32 template<typename T>
    33 struct rttid_holder {
    34     static id_t id() { return reinterpret_cast<id_t>( &inst() ); }
    35 
    36 private:
    37     struct rttid {};
    38 
    39     static rttid const& inst() { static rttid s_inst;  return s_inst; }
    40 };
    41 
    42 } // namespace rtti_detail
    43 
    44 //____________________________________________________________________________//
    45 
    46 template<typename T>   
    47 inline id_t
    48 type_id()
    49 {
    50     return rtti_detail::rttid_holder<T>::id();
    51 }
    52 
    53 //____________________________________________________________________________//
    54 
    55 #define BOOST_RTTI_SWITCH( type_id_ ) if( ::boost::rtti::id_t switch_by_id = type_id_ )
    56 #define BOOST_RTTI_CASE( type )       if( switch_by_id == ::boost::rtti::type_id<type>() )
    57 
    58 //____________________________________________________________________________//
    59 
    60 } // namespace rtti
    61 
    62 } // namespace boost
    63 
    64 // ************************************************************************** //
    65 //   Revision History:
    66 //
    67 //   $Log: rtti.hpp,v $
    68 //   Revision 1.2  2005/05/15 06:45:32  rogeeff
    69 //   *** empty log message ***
    70 //
    71 //   Revision 1.1  2005/04/12 06:48:12  rogeeff
    72 //   Runtime.Param library initial commit
    73 //
    74 // ************************************************************************** //
    75 
    76 #endif // BOOST_RT_RTTI_HPP_062604GER