12
12
#define PYBIND11_NAMESPACE_END_ NAMESPACE_END
13
13
#endif
14
14
15
-
16
15
PYBIND11_NAMESPACE_BEGIN_ (PYBIND11_NAMESPACE)
17
16
PYBIND11_NAMESPACE_BEGIN_(detail)
18
17
19
18
// See https://github.com/pybind/pybind11/issues/637
20
- // Also fbsource/fbcode/caffe2/torch/csrc/jit/python/pybind.h
21
19
22
20
using ListCasterBase =
23
21
pybind11::detail::list_caster<std::vector<map::Landmark *>,
@@ -52,66 +50,34 @@ struct sfm_iterator_state {
52
50
};
53
51
PYBIND11_NAMESPACE_END_ (detail)
54
52
55
- // / Makes an python iterator over the keys (`.first`) of a iterator over pairs
56
- // / from a first and past-the-end InputIterator.
57
- template <return_value_policy Policy = return_value_policy::reference_internal,
58
- typename Iterator, typename Sentinel,
59
- typename KeyType = decltype((*std::declval<Iterator>()).second),
60
- typename... Extra>
61
- iterator make_value_iterator(Iterator first, Sentinel last, Extra &&... extra) {
62
- typedef detail::sfm_iterator_state<Iterator, Sentinel, detail::RefIterator,
63
- Policy>
64
- state;
65
-
66
- if (!detail::get_type_info (typeid (state), false )) {
67
- class_<state>(handle (), " iterator" , pybind11::module_local ())
68
- .def (" __iter__" , [](state &s) -> state & { return s; })
69
- .def (" __next__" ,
70
- [](state &s) -> KeyType {
71
- if (!s.first_or_done ) {
72
- ++s.it ;
73
- } else {
74
- s.first_or_done = false ;
75
- }
76
- if (s.it == s.end ) {
77
- s.first_or_done = true ;
78
- throw stop_iteration ();
79
- }
80
- return (*s.it ).second ;
81
- },
82
- std::forward<Extra>(extra)..., Policy);
83
- }
84
-
85
- return cast (state{first, last, true });
86
- }
87
-
88
53
template <return_value_policy Policy = return_value_policy::reference_internal,
89
54
typename Iterator, typename Sentinel,
90
55
typename KeyType = decltype(&((*std::declval<Iterator>()).second)),
91
56
typename... Extra>
92
57
iterator make_ref_value_iterator(Iterator first, Sentinel last,
93
- Extra &&... extra) {
58
+ Extra &&...extra) {
94
59
typedef detail::sfm_iterator_state<Iterator, Sentinel,
95
60
detail::RefValueIterator, Policy>
96
61
state;
97
62
98
63
if (!detail::get_type_info (typeid (state), false )) {
99
64
class_<state>(handle (), " ref_value_iterator" , pybind11::module_local ())
100
65
.def (" __iter__" , [](state &s) -> state & { return s; })
101
- .def (" __next__" ,
102
- [](state &s) -> KeyType {
103
- if (!s.first_or_done ) {
104
- ++s.it ;
105
- } else {
106
- s.first_or_done = false ;
107
- }
108
- if (s.it == s.end ) {
109
- s.first_or_done = true ;
110
- throw stop_iteration ();
111
- }
112
- return &(s.it ->second );
113
- },
114
- std::forward<Extra>(extra)..., Policy);
66
+ .def (
67
+ " __next__" ,
68
+ [](state &s) -> KeyType {
69
+ if (!s.first_or_done ) {
70
+ ++s.it ;
71
+ } else {
72
+ s.first_or_done = false ;
73
+ }
74
+ if (s.it == s.end ) {
75
+ s.first_or_done = true ;
76
+ throw stop_iteration ();
77
+ }
78
+ return &(s.it ->second );
79
+ },
80
+ std::forward<Extra>(extra)..., Policy);
115
81
}
116
82
117
83
return cast (state{first, last, true });
@@ -123,88 +89,32 @@ template <
123
89
typename KeyType =
124
90
pybind11::tuple, // decltype(&((*std::declval<Iterator>()).second)),
125
91
typename ... Extra>
126
- iterator make_ref_iterator (Iterator first, Sentinel last, Extra &&... extra) {
92
+ iterator make_ref_iterator (Iterator first, Sentinel last, Extra &&...extra) {
127
93
typedef detail::sfm_iterator_state<Iterator, Sentinel, detail::ValueIterator,
128
94
Policy>
129
95
state;
130
96
131
97
if (!detail::get_type_info (typeid (state), false )) {
132
98
class_<state>(handle (), " ref_iterator" , pybind11::module_local ())
133
99
.def (" __iter__" , [](state &s) -> state & { return s; })
134
- .def (" __next__" ,
135
- [](state &s) -> KeyType {
136
- if (!s.first_or_done ) {
137
- ++s.it ;
138
- } else {
139
- s.first_or_done = false ;
140
- }
141
- if (s.it == s.end ) {
142
- s.first_or_done = true ;
143
- throw stop_iteration ();
144
- }
145
- return pybind11::make_tuple (s.it ->first , &(s.it ->second ));
146
- },
147
- std::forward<Extra>(extra)..., Policy);
148
- }
149
-
150
- return cast (state{first, last, true });
151
- }
152
-
153
- // / Makes a python iterator from a first and past-the-end C++ InputIterator.
154
- template <return_value_policy Policy = return_value_policy::reference_internal,
155
- typename Iterator, typename Sentinel,
156
- typename ValueType = decltype(std::declval<Iterator>()),
157
- typename ... Extra>
158
- iterator make_ptr_iterator (Iterator first, Sentinel last, Extra &&... extra) {
159
- typedef detail::iterator_state<Iterator, Sentinel, false , Policy> state;
160
-
161
- if (!detail::get_type_info (typeid (state), false )) {
162
- class_<state>(handle (), " iterator" , pybind11::module_local ())
163
- .def (" __iter__" , [](state &s) -> state & { return s; })
164
- .def (" __next__" ,
165
- [](state &s) -> ValueType {
166
- if (!s.first_or_done ) {
167
- ++s.it ;
168
- } else {
169
- s.first_or_done = false ;
170
- }
171
- if (s.it == s.end ) {
172
- s.first_or_done = true ;
173
- throw stop_iteration ();
174
- }
175
- return s.it ;
176
- },
177
- std::forward<Extra>(extra)..., Policy);
100
+ .def (
101
+ " __next__" ,
102
+ [](state &s) -> KeyType {
103
+ if (!s.first_or_done ) {
104
+ ++s.it ;
105
+ } else {
106
+ s.first_or_done = false ;
107
+ }
108
+ if (s.it == s.end ) {
109
+ s.first_or_done = true ;
110
+ throw stop_iteration ();
111
+ }
112
+ return pybind11::make_tuple (s.it ->first , &(s.it ->second ));
113
+ },
114
+ std::forward<Extra>(extra)..., Policy);
178
115
}
179
116
180
117
return cast (state{first, last, true });
181
118
}
182
119
183
- // / Makes an iterator over the keys (`.first`) of a stl map-like container
184
- // / supporting `std::begin()`/`std::end()`
185
- template <return_value_policy Policy = return_value_policy::reference_internal,
186
- typename Type, typename ... Extra>
187
- iterator make_value_iterator (Type &value, Extra &&... extra) {
188
- return make_value_iterator<Policy>(std::begin (value), std::end (value),
189
- extra...);
190
- }
191
- template <return_value_policy Policy = return_value_policy::reference_internal,
192
- typename Type, typename ... Extra>
193
- iterator make_unique_ptr_value_iterator (Type &value, Extra &&... extra) {
194
- return make_unique_ptr_value_iterator<Policy>(std::begin (value),
195
- std::end (value), extra...);
196
- }
197
- template <return_value_policy Policy = return_value_policy::reference_internal,
198
- typename Type, typename ... Extra>
199
- iterator make_unique_ptr_iterator (Type &value, Extra &&... extra) {
200
- return make_unique_ptr_iterator<Policy>(std::begin (value), std::end (value),
201
- extra...);
202
- }
203
-
204
- template <return_value_policy Policy = return_value_policy::reference_internal,
205
- typename Type, typename ... Extra>
206
- iterator make_ref_value_iterator (Type &value, Extra &&... extra) {
207
- return make_ref_value_iterator<Policy>(std::begin (value), std::end (value),
208
- extra...);
209
- }
210
120
PYBIND11_NAMESPACE_END_ (PYBIND11_NAMESPACE)
0 commit comments