All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
PointerCast.h
Go to the documentation of this file.
1 //=================================================================================================
20 //=================================================================================================
21 
22 #ifndef _BLAZE_UTIL_POINTERCAST_H_
23 #define _BLAZE_UTIL_POINTERCAST_H_
24 
25 
26 namespace blaze {
27 
28 //=================================================================================================
29 //
30 // POINTER CAST OPERATORS
31 //
32 //=================================================================================================
33 
34 //*************************************************************************************************
37 template< typename To, typename From > inline To* static_pointer_cast( From* ptr );
38 template< typename To, typename From > inline To* dynamic_pointer_cast( From* ptr );
39 template< typename To, typename From > inline To* const_pointer_cast( From* ptr);
40 template< typename To, typename From > inline To* reinterpret_pointer_cast( From* ptr );
42 //*************************************************************************************************
43 
44 
45 //*************************************************************************************************
63 template< typename To, typename From >
64 inline To* static_pointer_cast( From* ptr )
65 {
66  return static_cast<To*>( ptr );
67 }
68 //*************************************************************************************************
69 
70 
71 //*************************************************************************************************
90 template< typename To, typename From >
91 inline To* dynamic_pointer_cast( From* ptr )
92 {
93  return dynamic_cast<To*>( ptr );
94 }
95 //*************************************************************************************************
96 
97 
98 //*************************************************************************************************
115 template< typename To, typename From >
116 inline To* const_pointer_cast( From* ptr)
117 {
118  return const_cast<To*>( ptr );
119 }
120 //*************************************************************************************************
121 
122 
123 //*************************************************************************************************
140 template< typename To, typename From >
141 inline To* reinterpret_pointer_cast( From* ptr )
142 {
143  return reinterpret_cast<To*>( ptr );
144 }
145 //*************************************************************************************************
146 
147 
148 
149 
150 //=================================================================================================
151 //
152 // SMART POINTER CAST OPERATORS
153 //
154 //=================================================================================================
155 
156 //*************************************************************************************************
159 template< typename To, template<typename> class S, typename From > inline S<To> static_pointer_cast( S<From> ptr );
160 template< typename To, template<typename> class S, typename From > inline S<To> dynamic_pointer_cast( S<From> ptr );
161 template< typename To, template<typename> class S, typename From > inline S<To> const_pointer_cast( S<From> ptr);
162 template< typename To, template<typename> class S, typename From > inline S<To> reinterpret_pointer_cast( S<From> ptr );
164 //*************************************************************************************************
165 
166 
167 //*************************************************************************************************
188 template< typename To, template<typename> class S, typename From >
189 inline S<To> static_pointer_cast( S<From> ptr )
190 {
191  return S<To>( static_cast<To*>( ptr.get() ) );
192 }
193 //*************************************************************************************************
194 
195 
196 //*************************************************************************************************
218 template< typename To, template<typename> class S, typename From >
219 inline S<To> dynamic_pointer_cast( S<From> ptr )
220 {
221  return S<To>( dynamic_cast<To*>( ptr.get() ) );
222 }
223 //*************************************************************************************************
224 
225 
226 //*************************************************************************************************
246 template< typename To, template<typename> class S, typename From >
247 inline S<To> const_pointer_cast( S<From> ptr )
248 {
249  return S<To>( const_cast<To*>( ptr.get() ) );
250 }
251 //*************************************************************************************************
252 
253 
254 //*************************************************************************************************
264 template< typename To, template<typename> class S, typename From >
265 inline S<To> reinterpret_pointer_cast( S<From> ptr )
266 {
267  return S<To>( reinterpret_cast<To*>( ptr.get() ) );
268 }
269 //*************************************************************************************************
270 
271 } // namespace blaze
272 
273 #endif