cast.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef _CAST_H
00026 #define _CAST_H 1
00027
00028 _GLIBCXX_BEGIN_NAMESPACE(__gnu_cxx);
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044 template<typename _ToType>
00045 struct _Caster
00046 { typedef typename _ToType::element_type* type; };
00047
00048 template<typename _ToType>
00049 struct _Caster<_ToType*>
00050 { typedef _ToType* type; };
00051
00052
00053
00054
00055
00056
00057
00058
00059 template<typename _ToType, typename _FromType>
00060 inline _ToType
00061 __static_pointer_cast(const _FromType& __arg)
00062 { return _ToType(static_cast<typename _Caster<_ToType>::
00063 type>(__arg.get())); }
00064
00065 template<typename _ToType, typename _FromType>
00066 inline _ToType
00067 __dynamic_pointer_cast(const _FromType& __arg)
00068 { return _ToType(dynamic_cast<typename _Caster<_ToType>::
00069 type>(__arg.get())); }
00070
00071 template<typename _ToType, typename _FromType>
00072 inline _ToType
00073 __const_pointer_cast(const _FromType& __arg)
00074 { return _ToType(const_cast<typename _Caster<_ToType>::
00075 type>(__arg.get())); }
00076
00077 template<typename _ToType, typename _FromType>
00078 inline _ToType
00079 __reinterpret_pointer_cast(const _FromType& __arg)
00080 { return _ToType(reinterpret_cast<typename _Caster<_ToType>::
00081 type>(__arg.get())); }
00082
00083
00084
00085
00086
00087 template<typename _ToType, typename _FromType>
00088 inline _ToType
00089 __static_pointer_cast(_FromType* __arg)
00090 { return _ToType(static_cast<typename _Caster<_ToType>::
00091 type>(__arg)); }
00092
00093 template<typename _ToType, typename _FromType>
00094 inline _ToType
00095 __dynamic_pointer_cast(_FromType* __arg)
00096 { return _ToType(dynamic_cast<typename _Caster<_ToType>::
00097 type>(__arg)); }
00098
00099 template<typename _ToType, typename _FromType>
00100 inline _ToType
00101 __const_pointer_cast(_FromType* __arg)
00102 { return _ToType(const_cast<typename _Caster<_ToType>::
00103 type>(__arg)); }
00104
00105 template<typename _ToType, typename _FromType>
00106 inline _ToType
00107 __reinterpret_pointer_cast(_FromType* __arg)
00108 { return _ToType(reinterpret_cast<typename _Caster<_ToType>::
00109 type>(__arg)); }
00110
00111 _GLIBCXX_END_NAMESPACE
00112
00113 #endif // _CAST_H