| 
									
										
										
										
											2005-12-06 13:26:13 +00:00
										 |  |  | #ifndef BOOST_POINTER_TO_OTHER_HPP_INCLUDED
 | 
					
						
							|  |  |  | #define BOOST_POINTER_TO_OTHER_HPP_INCLUDED
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  pointer_to_other.hpp
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2008-07-12 14:47:13 +00:00
										 |  |  | //  (C) Copyright Ion Gaztanaga 2005.
 | 
					
						
							| 
									
										
										
										
											2005-12-06 13:26:13 +00:00
										 |  |  | //  Copyright (c) 2005 Peter Dimov.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  Distributed under the Boost Software License, Version 1.0.
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  (See accompanying file LICENSE_1_0.txt or copy at 
 | 
					
						
							|  |  |  | //  http://www.boost.org/LICENSE_1_0.txt)
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //  See http://www.boost.org/libs/smart_ptr/pointer_to_other.html
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace boost | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Defines the same pointer type (raw or smart) to another pointee type
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<class T, class U> | 
					
						
							|  |  |  | struct pointer_to_other; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<class T, class U,  | 
					
						
							|  |  |  |          template<class> class Sp> | 
					
						
							|  |  |  | struct pointer_to_other< Sp<T>, U > | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |    typedef Sp<U> type; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<class T, class T2, class U,  | 
					
						
							|  |  |  |          template<class, class> class Sp> | 
					
						
							|  |  |  | struct pointer_to_other< Sp<T, T2>, U > | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |    typedef Sp<U, T2> type; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<class T, class T2, class T3, class U,  | 
					
						
							|  |  |  |          template<class, class, class> class Sp> | 
					
						
							|  |  |  | struct pointer_to_other< Sp<T, T2, T3>, U > | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |    typedef Sp<U, T2, T3> type; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<class T, class U> | 
					
						
							|  |  |  | struct pointer_to_other< T*, U > | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |    typedef U* type; | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } // namespace boost
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif // #ifndef BOOST_POINTER_TO_OTHER_HPP_INCLUDED
 |