1From c35b110a83286e7413d7309eb218eb43b52f7d48 Mon Sep 17 00:00:00 2001
2From: Someone Serge <sergei.kozlukov@aalto.fi>
3Date: Sat, 19 Feb 2022 14:36:12 +0200
4Subject: [PATCH 4/4] pybind_utils.h: conflicts with nixpkgs' pybind
5
6---
7 opensfm/src/map/pybind_utils.h | 45 +++-------------------------------
8 1 file changed, 3 insertions(+), 42 deletions(-)
9
10diff --git a/opensfm/src/map/pybind_utils.h b/opensfm/src/map/pybind_utils.h
11index 817d1a16..3f98a2ab 100644
12--- a/opensfm/src/map/pybind_utils.h
13+++ b/opensfm/src/map/pybind_utils.h
14@@ -52,38 +52,6 @@ struct sfm_iterator_state {
15 };
16 PYBIND11_NAMESPACE_END_(detail)
17
18-/// Makes an python iterator over the keys (`.first`) of a iterator over pairs
19-/// from a first and past-the-end InputIterator.
20-template <return_value_policy Policy = return_value_policy::reference_internal,
21- typename Iterator, typename Sentinel,
22- typename KeyType = decltype((*std::declval<Iterator>()).second),
23- typename... Extra>
24-iterator make_value_iterator(Iterator first, Sentinel last, Extra &&... extra) {
25- typedef detail::sfm_iterator_state<Iterator, Sentinel, detail::RefIterator,
26- Policy>
27- state;
28-
29- if (!detail::get_type_info(typeid(state), false)) {
30- class_<state>(handle(), "iterator", pybind11::module_local())
31- .def("__iter__", [](state &s) -> state & { return s; })
32- .def("__next__",
33- [](state &s) -> KeyType {
34- if (!s.first_or_done)
35- ++s.it;
36- else
37- s.first_or_done = false;
38- if (s.it == s.end) {
39- s.first_or_done = true;
40- throw stop_iteration();
41- }
42- return (*s.it).second;
43- },
44- std::forward<Extra>(extra)..., Policy);
45- }
46-
47- return cast(state{first, last, true});
48-}
49-
50 template <return_value_policy Policy = return_value_policy::reference_internal,
51 typename Iterator, typename Sentinel,
52 typename KeyType = decltype(&((*std::declval<Iterator>()).second)),
53@@ -148,12 +116,13 @@ iterator make_ref_iterator(Iterator first, Sentinel last, Extra &&... extra) {
54 }
55
56 /// Makes a python iterator from a first and past-the-end C++ InputIterator.
57-template <return_value_policy Policy = return_value_policy::reference_internal,
58+template <typename Access,
59+ return_value_policy Policy = return_value_policy::reference_internal,
60 typename Iterator, typename Sentinel,
61 typename ValueType = decltype(std::declval<Iterator>()),
62 typename... Extra>
63 iterator make_ptr_iterator(Iterator first, Sentinel last, Extra &&... extra) {
64- typedef detail::iterator_state<Iterator, Sentinel, false, Policy> state;
65+ typedef detail::iterator_state<Access, Policy, Iterator, Sentinel, ValueType, Extra...> state;
66
67 if (!detail::get_type_info(typeid(state), false)) {
68 class_<state>(handle(), "iterator", pybind11::module_local())
69@@ -176,14 +145,6 @@ iterator make_ptr_iterator(Iterator first, Sentinel last, Extra &&... extra) {
70 return cast(state{first, last, true});
71 }
72
73-/// Makes an iterator over the keys (`.first`) of a stl map-like container
74-/// supporting `std::begin()`/`std::end()`
75-template <return_value_policy Policy = return_value_policy::reference_internal,
76- typename Type, typename... Extra>
77-iterator make_value_iterator(Type &value, Extra &&... extra) {
78- return make_value_iterator<Policy>(std::begin(value), std::end(value),
79- extra...);
80-}
81 template <return_value_policy Policy = return_value_policy::reference_internal,
82 typename Type, typename... Extra>
83 iterator make_unique_ptr_value_iterator(Type &value, Extra &&... extra) {
84--
852.33.1
86