FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
python/include/boost/python/cast.hpp at python313 · 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
/
cast.hpp
Copy path
More file actions
More file actions
Latest commit
History
History
History
105 lines (85 loc) · 2.88 KB
Breadcrumbs
python
/
include
/
boost
/
python
/
cast.hpp
Copy path
File metadata and controls
105 lines (85 loc) · 2.88 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
//
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
CAST_DWA200269_HPP
#
define
CAST_DWA200269_HPP
#
include
<
boost/python/detail/prefix.hpp
>
#
include
<
boost/python/detail/type_traits.hpp
>
#
include
<
boost/type.hpp
>
#
include
<
boost/python/base_type_traits.hpp
>
#
include
<
boost/python/detail/convertible.hpp
>
namespace
boost
{
namespace
python
{
namespace
detail
{
template
<
class
Source
,
class
Target
>
inline
Target*
upcast_impl
(Source*, Target*);
template
<
class
Source
,
class
Target
>
inline
Target*
upcast
(Source* p, yes_convertible, no_convertible, Target*)
{
return
p;
}
template
<
class
Source
,
class
Target
>
inline
Target*
upcast
(Source* p, no_convertible, no_convertible, Target*)
{
typedef
typename
base_type_traits<Source>::type base;
return
detail::upcast_impl
((base*)p, (Target*)
0
);
}
template
<
bool
is_same =
true
>
struct
upcaster
{
template
<
class
T
>
static
inline
T*
execute
(T* x, T*) {
return
x; }
};
template
<>
struct
upcaster
<
false
>
{
template
<
class
Source
,
class
Target
>
static
inline
Target*
execute
(Source* x, Target*)
{
return
detail::upcast
(
x, detail::convertible<Target*>::
check
(x)
, detail::convertible<Source*>::
check
((Target*)
0
)
, (Target*)
0
);
}
};
template
<
class
Target
,
class
Source
>
inline
Target*
downcast
(Source* p, yes_convertible)
{
return
static_cast
<Target*>(p);
}
template
<
class
Target
,
class
Source
>
inline
Target*
downcast
(Source* p, no_convertible, boost::type<Target>* =
0
)
{
typedef
typename
base_type_traits<Source>::type base;
return
(Target*)detail::downcast<base>(p, convertible<Source*>::
check
((base*)
0
));
}
template
<
class
T
>
inline
void
assert_castable
(boost::type<T>* =
0
)
{
typedef
char
must_be_a_complete_type[
sizeof
(T)]
BOOST_ATTRIBUTE_UNUSED
;
}
template
<
class
Source
,
class
Target
>
inline
Target*
upcast_impl
(Source* x, Target*)
{
typedef
typename
detail::add_cv<Source>::type
src_t
;
typedef
typename
detail::add_cv<Target>::type
target_t
;
bool
const
same = detail::is_same<
src_t
,
target_t
>::value;
return
detail::upcaster<same>::
execute
(x, (Target*)
0
);
}
}
template
<
class
Target
,
class
Source
>
inline
Target*
upcast
(Source* x, Target* =
0
)
{
detail::assert_castable<Source>();
detail::assert_castable<Target>();
return
detail::upcast_impl
(x, (Target*)
0
);
}
template
<
class
Target
,
class
Source
>
inline
Target*
downcast
(Source* x, Target* =
0
)
{
detail::assert_castable<Source>();
detail::assert_castable<Target>();
return
detail::downcast<Target>(x, detail::convertible<Source*>::
check
((Target*)
0
));
}
}}
//
namespace boost::python
#
endif
//
CAST_DWA200269_HPP
Back
|
FazBrowse Home
|
New Git URL