FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python/include/boost/python/object/make_ptr_instance.hpp at develop · boostorg/python · GitHub
Uh oh!
There was an error while loading.
Please reload this page
.
boostorg
/
python
Public
Notifications
You must be signed in to change notification settings
Fork
223
Star
537
Code
Issues
173
Pull requests
34
Actions
Projects
Wiki
Security and quality
0
Insights
Additional navigation options
Code
Issues
Pull requests
Actions
Projects
Wiki
Security and quality
Insights
Expand file tree
Breadcrumbs
python
/
include
/
boost
/
python
/
object
/
make_ptr_instance.hpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
76 lines (65 loc) · 2.24 KB
Breadcrumbs
python
/
include
/
boost
/
python
/
object
/
make_ptr_instance.hpp
Copy path
File metadata and controls
76 lines (65 loc) · 2.24 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
//
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
MAKE_PTR_INSTANCE_DWA200296_HPP
#
define
MAKE_PTR_INSTANCE_DWA200296_HPP
#
include
<
boost/python/object/make_instance.hpp
>
#
include
<
boost/python/converter/registry.hpp
>
#
include
<
boost/python/detail/type_traits.hpp
>
#
include
<
boost/get_pointer.hpp
>
#
include
<
boost/detail/workaround.hpp
>
#
include
<
typeinfo
>
namespace
boost
{
namespace
python
{
namespace
objects
{
template
<
class
T
,
class
Holder
>
struct
make_ptr_instance
: make_instance_impl<T, Holder, make_ptr_instance<T,Holder> >
{
template
<
class
Arg
>
static
inline
Holder*
construct
(
void
* storage, PyObject*, Arg& x)
{
#
if
defined(BOOST_NO_CXX11_SMART_PTR)
return
new
(storage)
Holder
(x);
#
else
return
new
(storage)
Holder
(
std::move
(x));
#
endif
}
template
<
class
Ptr
>
static
inline
PyTypeObject*
get_class_object
(Ptr
const
& x)
{
return
get_class_object_impl
(
get_pointer
(x));
}
#
ifndef
BOOST_PYTHON_NO_PY_SIGNATURES
static
inline
PyTypeObject
const
*
get_pytype
()
{
return
converter::registered<T>::converters.
get_class_object
();
}
#
endif
private:
template
<
class
U
>
static
inline
PyTypeObject*
get_class_object_impl
(U
const
volatile
* p)
{
if
(p ==
0
)
return
0
;
//
means "return None".
PyTypeObject* derived =
get_derived_class_object
(
BOOST_DEDUCED_TYPENAME
boost::python::detail::is_polymorphic<U>::
type
(), p);
if
(derived)
return
derived;
return
converter::registered<T>::converters.
get_class_object
();
}
template
<
class
U
>
static
inline
PyTypeObject*
get_derived_class_object
(boost::python::detail::true_, U
const
volatile
* x)
{
converter::registration
const
* r =
converter::registry::query
(
type_info
(
typeid
(*x))
);
return
r ? r->
m_class_object
:
0
;
}
template
<
class
U
>
static
inline
PyTypeObject*
get_derived_class_object
(boost::python::detail::false_, U*)
{
return
0
;
}
};
}}}
//
namespace boost::python::object
#
endif
//
MAKE_PTR_INSTANCE_DWA200296_HPP
Back
|
FazBrowse Home
|
New Git URL