FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python/include/boost/python/return_arg.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
/
return_arg.hpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
109 lines (91 loc) · 2.73 KB
Breadcrumbs
python
/
include
/
boost
/
python
/
return_arg.hpp
Copy path
File metadata and controls
109 lines (91 loc) · 2.73 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
//
Copyright David Abrahams and Nikolay Mladenov 2003.
//
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
RETURN_ARG_DWA2003719_HPP
#
define
RETURN_ARG_DWA2003719_HPP
#
include
<
boost/python/default_call_policies.hpp
>
#
include
<
boost/python/detail/none.hpp
>
#
include
<
boost/python/detail/value_arg.hpp
>
#
ifndef
BOOST_PYTHON_NO_PY_SIGNATURES
#
include
<
boost/python/converter/pytype_function.hpp
>
#
endif
#
include
<
boost/python/detail/type_traits.hpp
>
#
include
<
boost/mpl/int.hpp
>
#
include
<
boost/mpl/at.hpp
>
#
include
<
boost/static_assert.hpp
>
#
include
<
boost/python/refcount.hpp
>
#
include
<
cstddef
>
namespace
boost
{
namespace
python
{
namespace
detail
{
template
<std::
size_t
>
struct
return_arg_pos_argument_must_be_positive
#
if
defined(__GNUC__) || defined(__EDG__)
{}
#
endif
;
struct
return_none
{
template
<
class
T
>
struct
apply
{
struct
type
{
static
bool
convertible
()
{
return
true
;
}
PyObject *
operator
()(
typename
value_arg<T>::type )
const
{
return
none
();
}
#
ifndef
BOOST_PYTHON_NO_PY_SIGNATURES
PyTypeObject
const
*
get_pytype
()
const
{
return
converter::expected_pytype_for_arg<T>::
get_pytype
() ; }
#
endif
};
};
};
}
template
<
std::
size_t
arg_pos=
1
,
class
Base
= default_call_policies
>
struct
return_arg
: Base
{
private:
BOOST_STATIC_CONSTANT
(
bool
, legal = arg_pos >
0
);
public:
typedef
typename
mpl::if_c<
legal
, detail::return_none
, detail::return_arg_pos_argument_must_be_positive<arg_pos>
//
we could default to the base result_converter in case or
//
arg_pos==0 since return arg 0 means return result, but I
//
think it is better to issue an error instead, cause it can
//
lead to confusions
>::type result_converter;
template
<
class
ArgumentPackage
>
static
PyObject*
postcall
(ArgumentPackage
const
& args, PyObject* result)
{
//
In case of arg_pos == 0 we could simply return Base::postcall,
//
but this is redundant
BOOST_STATIC_ASSERT
(arg_pos >
0
);
result =
Base::postcall
(args,result);
if
(!result)
return
0
;
Py_DECREF
(result);
return
incref
(
detail::get
(mpl::int_<arg_pos-
1
>(),args) );
}
template
<
class
Sig
>
struct
extract_return_type
: mpl::at_c<Sig, arg_pos>
{
};
};
template
<
class
Base
= default_call_policies
>
struct
return_self
: return_arg<
1
,Base>
{};
}}
//
namespace boost::python
#
endif
//
RETURN_ARG_DWA2003719_HPP
Back
|
FazBrowse Home
|
New Git URL