FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python/include/boost/python/to_python_indirect.hpp at develop · elmopl/python · GitHub
elmopl
/
python
Public
forked from
boostorg/python
Notifications
You must be signed in to change notification settings
Fork
0
Star
0
Code
Pull requests
0
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
python
/
include
/
boost
/
python
/
to_python_indirect.hpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
112 lines (97 loc) · 2.9 KB
Breadcrumbs
python
/
include
/
boost
/
python
/
to_python_indirect.hpp
Copy path
File metadata and controls
112 lines (97 loc) · 2.9 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
//
Copyright David Abrahams 2002.
//
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)
#
ifndef
TO_PYTHON_INDIRECT_DWA200221_HPP
#
define
TO_PYTHON_INDIRECT_DWA200221_HPP
#
include
<
boost/python/detail/prefix.hpp
>
#
include
<
boost/python/object/pointer_holder.hpp
>
#
include
<
boost/python/object/make_ptr_instance.hpp
>
#
include
<
boost/python/detail/none.hpp
>
#
ifndef
BOOST_PYTHON_NO_PY_SIGNATURES
#
include
<
boost/python/converter/pytype_function.hpp
>
#
endif
#
include
<
boost/python/refcount.hpp
>
#
include
<
boost/python/detail/type_traits.hpp
>
#
if
defined(__ICL) && __ICL < 600
#
include
<
boost/shared_ptr.hpp
>
#
else
#
include
<
memory
>
#
endif
namespace
boost
{
namespace
python
{
template
<
class
T
,
class
MakeHolder
>
struct
to_python_indirect
{
template
<
class
U
>
inline
PyObject*
operator
()(U
const
& ref)
const
{
return
this
->
execute
(
const_cast
<U&>(ref), detail::is_pointer<U>());
}
#
ifndef
BOOST_PYTHON_NO_PY_SIGNATURES
inline
PyTypeObject
const
*
get_pytype
()
const
{
return
converter::registered_pytype<T>::
get_pytype
();
}
#
endif
private:
template
<
class
U
>
inline
PyObject*
execute
(U* ptr, detail::true_)
const
{
//
No special NULL treatment for references
if
(ptr ==
0
)
return
python::detail::none
();
else
return
this
->
execute
(*ptr,
detail::false_
());
}
template
<
class
U
>
inline
PyObject*
execute
(U
const
& x, detail::false_)
const
{
U*
const
p = &
const_cast
<U&>(x);
if
(detail::is_polymorphic<U>::value)
{
if
(PyObject* o =
detail::wrapper_base_::owner
(p))
return
incref
(o);
}
return
MakeHolder::execute
(p);
}
};
//
//
implementations
//
namespace
detail
{
struct
make_owning_holder
{
template
<
class
T
>
static
PyObject*
execute
(T* p)
{
//
can't use auto_ptr with Intel 5 and VC6 Dinkum library
//
for some reason. We get link errors against the auto_ptr
//
copy constructor.
#
if
defined(__ICL) && __ICL < 600
typedef
boost::shared_ptr<T> smart_pointer;
#
elif
defined(BOOST_NO_CXX11_SMART_PTR)
typedef
std::auto_ptr<T> smart_pointer;
#
else
typedef
std::unique_ptr<T> smart_pointer;
#
endif
typedef
objects::pointer_holder<smart_pointer, T>
holder_t
;
smart_pointer
ptr
(
const_cast
<T*>(p));
return
objects::make_ptr_instance<T,
holder_t
>::
execute
(ptr);
}
};
struct
make_reference_holder
{
template
<
class
T
>
static
PyObject*
execute
(T* p)
{
typedef
objects::pointer_holder<T*, T>
holder_t
;
T* q =
const_cast
<T*>(p);
return
objects::make_ptr_instance<T,
holder_t
>::
execute
(q);
}
};
}
}}
//
namespace boost::python
#
endif
//
TO_PYTHON_INDIRECT_DWA200221_HPP
Back
|
FazBrowse Home
|
New Git URL