Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
P
pybind11_abseil
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_abseil
Commits
0807a71b
Commit
0807a71b
authored
Mar 22, 2022
by
Xiaofei Wang
Committed by
Copybara-Service
Mar 22, 2022
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Internal change
PiperOrigin-RevId: 436599575
parent
df7f5cc8
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
58 additions
and
0 deletions
+58
-0
pybind11_abseil/absl_casters.h
+26
-0
pybind11_abseil/tests/absl_example.cc
+13
-0
pybind11_abseil/tests/absl_test.py
+19
-0
No files found.
pybind11_abseil/absl_casters.h
View file @
0807a71b
...
...
@@ -43,6 +43,7 @@
#include "absl/container/btree_map.h"
#include "absl/container/flat_hash_map.h"
#include "absl/container/flat_hash_set.h"
#include "absl/strings/cord.h"
#include "absl/strings/string_view.h"
#include "absl/time/civil_time.h"
#include "absl/time/time.h"
...
...
@@ -385,6 +386,31 @@ struct type_caster<absl::string_view> : string_caster<absl::string_view, true> {
};
#endif
template
<>
struct
type_caster
<
absl
::
Cord
>
{
public
:
using
StringViewCaster
=
make_caster
<
absl
::
string_view
>
;
PYBIND11_TYPE_CASTER
(
absl
::
Cord
,
_
<
absl
::
Cord
>
());
// Conversion part 1 (Python->C++)
bool
load
(
handle
src
,
bool
convert
)
{
auto
caster
=
StringViewCaster
();
if
(
caster
.
load
(
src
,
convert
))
{
absl
::
string_view
view
=
cast_op
<
absl
::
string_view
>
(
std
::
move
(
caster
));
value
=
view
;
return
true
;
}
return
false
;
}
// Conversion part 2 (C++ -> Python)
static
handle
cast
(
const
absl
::
Cord
&
src
,
return_value_policy
policy
,
handle
parent
)
{
return
StringViewCaster
::
cast
(
absl
::
string_view
(
std
::
string
(
src
)),
policy
,
parent
);
}
};
// Convert between absl::optional and python.
//
// pybind11 supports std::optional, and absl::optional is meant to be a
...
...
pybind11_abseil/tests/absl_example.cc
View file @
0807a71b
...
...
@@ -122,6 +122,15 @@ class StringContainer {
std
::
string
values_
;
};
bool
CheckAbslCord
(
absl
::
Cord
cord
,
const
std
::
string
&
values
)
{
return
cord
==
values
;
}
absl
::
Cord
ReturnAbslCord
(
const
std
::
string
&
values
)
{
absl
::
Cord
cord
(
values
);
return
cord
;
}
bool
CheckOptional
(
const
absl
::
optional
<
int
>
optional
,
bool
given
,
int
value
)
{
if
(
!
given
&&
!
optional
.
has_value
())
return
true
;
if
(
given
&&
optional
.
has_value
()
&&
optional
.
value
()
==
value
)
return
true
;
...
...
@@ -330,6 +339,10 @@ PYBIND11_MODULE(absl_example, m) {
.
def
(
init
())
.
def
(
"make_string_view"
,
&
StringContainer
::
MakeStringView
,
arg
(
"values"
));
// absl::Cord bindings.
m
.
def
(
"check_absl_cord"
,
&
CheckAbslCord
,
arg
(
"view"
),
arg
(
"values"
));
m
.
def
(
"return_absl_cord"
,
&
ReturnAbslCord
,
arg
(
"values"
));
// absl::optional bindings.
m
.
def
(
"check_optional"
,
&
CheckOptional
,
arg
(
"optional"
)
=
absl
::
nullopt
,
arg
(
"given"
)
=
false
,
arg
(
"value"
)
=
0
);
...
...
pybind11_abseil/tests/absl_test.py
View file @
0807a71b
...
...
@@ -333,6 +333,25 @@ class AbslStringViewTest(absltest.TestCase):
absl_example
.
check_string_view
(
self
.
TEST_STRING
,
self
.
TEST_STRING
))
class
AbslCordTest
(
absltest
.
TestCase
):
TEST_STRING
=
'absl_Cord'
TEST_BYTES
=
b
'absl_Cord'
def
test_return_absl_cord
(
self
):
self
.
assertSequenceEqual
(
absl_example
.
return_absl_cord
(
self
.
TEST_STRING
),
self
.
TEST_STRING
)
self
.
assertSequenceEqual
(
absl_example
.
return_absl_cord
(
self
.
TEST_BYTES
),
self
.
TEST_STRING
)
def
test_pass_absl_cord
(
self
):
self
.
assertTrue
(
absl_example
.
check_absl_cord
(
self
.
TEST_STRING
,
self
.
TEST_STRING
))
self
.
assertFalse
(
absl_example
.
check_absl_cord
(
self
.
TEST_STRING
,
'12345'
))
self
.
assertTrue
(
absl_example
.
check_absl_cord
(
self
.
TEST_BYTES
,
self
.
TEST_STRING
))
class
AbslFlatHashMapTest
(
absltest
.
TestCase
):
def
test_return_map
(
self
):
...
...
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