Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pybind11
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open
pybind11
Commits
34e71820
Commit
34e71820
authored
Jan 11, 2021
by
Ralf W. Grosse-Kunstleve
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Retrieving smart_holder pointer in type_caster<mpty>::load, and using it cast_op operators.
parent
e820f34a
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
24 additions
and
18 deletions
+24
-18
tests/test_classh_wip.cpp
+18
-12
tests/test_classh_wip.py
+6
-6
No files found.
tests/test_classh_wip.cpp
View file @
34e71820
...
...
@@ -17,12 +17,12 @@ mpty& rtrn_mpty_mref() { static mpty obj; return obj; }
mpty
const
*
rtrn_mpty_cptr
()
{
static
mpty
obj
;
return
&
obj
;
}
mpty
*
rtrn_mpty_mptr
()
{
static
mpty
obj
;
return
&
obj
;
}
const
char
*
pass_mpty_valu
(
mpty
)
{
return
"load_valu"
;
}
const
char
*
pass_mpty_rref
(
mpty
&&
)
{
return
"load_rref"
;
}
const
char
*
pass_mpty_cref
(
mpty
const
&
)
{
return
"load_cref"
;
}
const
char
*
pass_mpty_mref
(
mpty
&
)
{
return
"load_mref"
;
}
const
char
*
pass_mpty_cptr
(
mpty
const
*
)
{
return
"load_cptr"
;
}
const
char
*
pass_mpty_mptr
(
mpty
*
)
{
return
"load_mptr"
;
}
std
::
string
pass_mpty_valu
(
mpty
obj
)
{
return
"pass_valu:"
+
obj
.
mtxt
;
}
std
::
string
pass_mpty_rref
(
mpty
&&
obj
)
{
return
"pass_rref:"
+
obj
.
mtxt
;
}
std
::
string
pass_mpty_cref
(
mpty
const
&
obj
)
{
return
"pass_cref:"
+
obj
.
mtxt
;
}
std
::
string
pass_mpty_mref
(
mpty
&
obj
)
{
return
"pass_mref:"
+
obj
.
mtxt
;
}
std
::
string
pass_mpty_cptr
(
mpty
const
*
obj
)
{
return
"pass_cptr:"
+
obj
->
mtxt
;
}
std
::
string
pass_mpty_mptr
(
mpty
*
obj
)
{
return
"pass_mptr:"
+
obj
->
mtxt
;
}
std
::
shared_ptr
<
mpty
>
rtrn_mpty_shmp
()
{
return
std
::
shared_ptr
<
mpty
>
(
new
mpty
);
}
std
::
shared_ptr
<
mpty
const
>
rtrn_mpty_shcp
()
{
return
std
::
shared_ptr
<
mpty
const
>
(
new
mpty
);
}
...
...
@@ -94,17 +94,23 @@ struct type_caster<mpty> {
std
::
is_same
<
T_
,
mpty
&&>::
value
,
mpty
&&
,
mpty
>>>>>
;
operator
mpty
()
{
return
rtrn_mpty_valu
();
}
operator
mpty
&&
()
&&
{
return
rtrn_mpty_rref
();
}
operator
mpty
const
&
()
{
return
rtrn_mpty_cref
();
}
operator
mpty
&
()
{
return
rtrn_mpty_mref
();
}
operator
mpty
const
*
()
{
return
rtrn_mpty_cptr
();
}
operator
mpty
*
()
{
return
rtrn_mpty_mptr
();
}
operator
mpty
()
{
return
smhldr_ptr
->
lvalue_ref
<
mpty
>
();
}
operator
mpty
&&
()
&&
{
return
smhldr_ptr
->
rvalue_ref
<
mpty
>
();
}
operator
mpty
const
&
()
{
return
smhldr_ptr
->
lvalue_ref
<
mpty
>
();
}
operator
mpty
&
()
{
return
smhldr_ptr
->
lvalue_ref
<
mpty
>
();
}
operator
mpty
const
*
()
{
return
smhldr_ptr
->
as_raw_ptr_unowned
<
mpty
>
();
}
operator
mpty
*
()
{
return
smhldr_ptr
->
as_raw_ptr_unowned
<
mpty
>
();
}
bool
load
(
handle
src
,
bool
/*convert*/
)
{
if
(
!
isinstance
<
mpty
>
(
src
))
return
false
;
auto
inst
=
reinterpret_cast
<
instance
*>
(
src
.
ptr
());
auto
v_h
=
inst
->
get_value_and_holder
(
get_type_info
(
typeid
(
mpty
)));
smhldr_ptr
=
&
v_h
.
holder
<
pybindit
::
memory
::
smart_holder
>
();
return
true
;
}
private
:
pybindit
::
memory
::
smart_holder
*
smhldr_ptr
=
nullptr
;
};
template
<>
...
...
tests/test_classh_wip.py
View file @
34e71820
...
...
@@ -23,12 +23,12 @@ def test_cast():
def
test_load
():
assert
m
.
pass_mpty_valu
(
m
.
mpty
(
))
==
"load_v
alu"
assert
m
.
pass_mpty_rref
(
m
.
mpty
(
))
==
"load_r
ref"
assert
m
.
pass_mpty_cref
(
m
.
mpty
(
))
==
"load_c
ref"
assert
m
.
pass_mpty_mref
(
m
.
mpty
(
))
==
"load_m
ref"
assert
m
.
pass_mpty_cptr
(
m
.
mpty
(
))
==
"load_c
ptr"
assert
m
.
pass_mpty_mptr
(
m
.
mpty
(
))
==
"load_m
ptr"
assert
m
.
pass_mpty_valu
(
m
.
mpty
(
"Valu"
))
==
"pass_valu:V
alu"
assert
m
.
pass_mpty_rref
(
m
.
mpty
(
"Rref"
))
==
"pass_rref:R
ref"
assert
m
.
pass_mpty_cref
(
m
.
mpty
(
"Cref"
))
==
"pass_cref:C
ref"
assert
m
.
pass_mpty_mref
(
m
.
mpty
(
"Mref"
))
==
"pass_mref:M
ref"
assert
m
.
pass_mpty_cptr
(
m
.
mpty
(
"Cptr"
))
==
"pass_cptr:C
ptr"
assert
m
.
pass_mpty_mptr
(
m
.
mpty
(
"Mptr"
))
==
"pass_mptr:M
ptr"
def
test_cast_shared_ptr
():
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment