test_opaque_types.cpp
Go to the documentation of this file.
1 /*
2  tests/test_opaque_types.cpp -- opaque types, passing void pointers
3 
4  Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
5 
6  All rights reserved. Use of this source code is governed by a
7  BSD-style license that can be found in the LICENSE file.
8 */
9 
10 #include "pybind11_tests.h"
11 #include <pybind11/stl.h>
12 #include <vector>
13 
14 // IMPORTANT: Disable internal pybind11 translation mechanisms for STL data structures
15 //
16 // This also deliberately doesn't use the below StringList type alias to test
17 // that MAKE_OPAQUE can handle a type containing a `,`. (The `std::allocator`
18 // bit is just the default `std::vector` allocator).
19 PYBIND11_MAKE_OPAQUE(std::vector<std::string, std::allocator<std::string>>);
20 
21 using StringList = std::vector<std::string, std::allocator<std::string>>;
22 
23 TEST_SUBMODULE(opaque_types, m) {
24  // test_string_list
25  py::class_<StringList>(m, "StringList")
26  .def(py::init<>())
27  .def("pop_back", &StringList::pop_back)
28  /* There are multiple versions of push_back(), etc. Select the right ones. */
29  .def("push_back", (void (StringList::*)(const std::string &)) &StringList::push_back)
30  .def("back", (std::string &(StringList::*)()) &StringList::back)
31  .def("__len__", [](const StringList &v) { return v.size(); })
32  .def("__iter__", [](StringList &v) {
33  return py::make_iterator(v.begin(), v.end());
34  }, py::keep_alive<0, 1>());
35 
36  class ClassWithSTLVecProperty {
37  public:
38  StringList stringList;
39  };
40  py::class_<ClassWithSTLVecProperty>(m, "ClassWithSTLVecProperty")
41  .def(py::init<>())
42  .def_readwrite("stringList", &ClassWithSTLVecProperty::stringList);
43 
44  m.def("print_opaque_list", [](const StringList &l) {
45  std::string ret = "Opaque list: [";
46  bool first = true;
47  for (auto entry : l) {
48  if (!first)
49  ret += ", ";
50  ret += entry;
51  first = false;
52  }
53  return ret + "]";
54  });
55 
56  // test_pointers
57  m.def("return_void_ptr", []() { return (void *) 0x1234; });
58  m.def("get_void_ptr_value", [](void *ptr) { return reinterpret_cast<std::intptr_t>(ptr); });
59  m.def("return_null_str", []() { return (char *) nullptr; });
60  m.def("get_null_str_value", [](char *ptr) { return reinterpret_cast<std::intptr_t>(ptr); });
61 
62  m.def("return_unique_ptr", []() -> std::unique_ptr<StringList> {
63  auto *result = new StringList();
64  result->push_back("some value");
65  return std::unique_ptr<StringList>(result);
66  });
67 }
Matrix3f m
std::vector< std::string, std::allocator< std::string >> StringList
ArrayXcf v
Definition: Cwise_arg.cpp:1
iterator make_iterator(Iterator first, Sentinel last, Extra &&...extra)
Makes a python iterator from a first and past-the-end C++ InputIterator.
Definition: pybind11.h:1764
static const Line3 l(Rot3(), 1, 1)
constexpr int first(int i)
Implementation details for constexpr functions.
Values result
float * ptr
TEST_SUBMODULE(opaque_types, m)
PYBIND11_MAKE_OPAQUE(std::vector< std::string, std::allocator< std::string >>)
DenseIndex ret
Definition: level1_impl.h:59
_W64 signed int intptr_t
Definition: ms_stdint.h:123


gtsam
Author(s):
autogenerated on Sat May 8 2021 02:46:03