• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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)32 inline 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