1 #ifndef BOOST_PYTHON_PTR_HPP 2 # define BOOST_PYTHON_PTR_HPP 3 4 # include <boost/python/detail/prefix.hpp> 5 // Copyright David Abrahams 2002. 6 // Distributed under the Boost Software License, Version 1.0. (See 7 // accompanying file LICENSE_1_0.txt or copy at 8 // http://www.boost.org/LICENSE_1_0.txt) 9 // 10 // Based on boost/ref.hpp, thus: 11 // Copyright (C) 1999, 2000 Jaakko Jarvi (jaakko.jarvi@cs.utu.fi) 12 // Copyright (C) 2001 Peter Dimov 13 14 # include <boost/config.hpp> 15 # include <boost/mpl/bool.hpp> 16 17 namespace boost { namespace python { 18 19 template<class Ptr> class pointer_wrapper 20 { 21 public: 22 typedef Ptr type; 23 pointer_wrapper(Ptr x)24 explicit pointer_wrapper(Ptr x): p_(x) {} operator Ptr() const25 operator Ptr() const { return p_; } get() const26 Ptr get() const { return p_; } 27 private: 28 Ptr p_; 29 }; 30 31 template<class T> ptr(T t)32inline pointer_wrapper<T> ptr(T t) 33 { 34 return pointer_wrapper<T>(t); 35 } 36 37 template<typename T> 38 class is_pointer_wrapper 39 : public mpl::false_ 40 { 41 }; 42 43 template<typename T> 44 class is_pointer_wrapper<pointer_wrapper<T> > 45 : public mpl::true_ 46 { 47 }; 48 49 template<typename T> 50 class unwrap_pointer 51 { 52 public: 53 typedef T type; 54 }; 55 56 template<typename T> 57 class unwrap_pointer<pointer_wrapper<T> > 58 { 59 public: 60 typedef T type; 61 }; 62 63 }} // namespace boost::python 64 65 #endif 66