|
18 | 18 | #include "xtensor/xiterator.hpp"
|
19 | 19 | #include "xtensor/xsemantic.hpp"
|
20 | 20 |
|
| 21 | +#include "pyarray_backstrides.hpp" |
21 | 22 | #include "pycontainer.hpp"
|
22 | 23 | #include "pystrides_adaptor.hpp"
|
23 | 24 | #include "xtensor_type_caster_base.hpp"
|
@@ -100,200 +101,6 @@ namespace pybind11
|
100 | 101 |
|
101 | 102 | namespace xt
|
102 | 103 | {
|
103 |
| - |
104 |
| - /************************** |
105 |
| - * pybackstrides_iterator * |
106 |
| - **************************/ |
107 |
| - |
108 |
| - template <class B> |
109 |
| - class pybackstrides_iterator |
110 |
| - { |
111 |
| - public: |
112 |
| - |
113 |
| - using self_type = pybackstrides_iterator<B>; |
114 |
| - |
115 |
| - using value_type = typename B::value_type; |
116 |
| - using pointer = const value_type*; |
117 |
| - using reference = value_type; |
118 |
| - using difference_type = std::ptrdiff_t; |
119 |
| - using iterator_category = std::random_access_iterator_tag; |
120 |
| - |
121 |
| - inline pybackstrides_iterator(const B* b, std::size_t offset) |
122 |
| - : p_b(b), m_offset(offset) |
123 |
| - { |
124 |
| - } |
125 |
| - |
126 |
| - inline reference operator*() const |
127 |
| - { |
128 |
| - return p_b->operator[](m_offset); |
129 |
| - } |
130 |
| - |
131 |
| - inline pointer operator->() const |
132 |
| - { |
133 |
| - // Returning the address of a temporary |
134 |
| - value_type res = p_b->operator[](m_offset); |
135 |
| - return &res; |
136 |
| - } |
137 |
| - |
138 |
| - inline reference operator[](difference_type n) const |
139 |
| - { |
140 |
| - return p_b->operator[](m_offset + n); |
141 |
| - } |
142 |
| - |
143 |
| - inline self_type& operator++() |
144 |
| - { |
145 |
| - ++m_offset; |
146 |
| - return *this; |
147 |
| - } |
148 |
| - |
149 |
| - inline self_type& operator--() |
150 |
| - { |
151 |
| - --m_offset; |
152 |
| - return *this; |
153 |
| - } |
154 |
| - |
155 |
| - inline self_type operator++(int) |
156 |
| - { |
157 |
| - self_type tmp(*this); |
158 |
| - ++m_offset; |
159 |
| - return tmp; |
160 |
| - } |
161 |
| - |
162 |
| - inline self_type operator--(int) |
163 |
| - { |
164 |
| - self_type tmp(*this); |
165 |
| - --m_offset; |
166 |
| - return tmp; |
167 |
| - } |
168 |
| - |
169 |
| - inline self_type& operator+=(difference_type n) |
170 |
| - { |
171 |
| - m_offset += n; |
172 |
| - return *this; |
173 |
| - } |
174 |
| - |
175 |
| - inline self_type& operator-=(difference_type n) |
176 |
| - { |
177 |
| - m_offset -= n; |
178 |
| - return *this; |
179 |
| - } |
180 |
| - |
181 |
| - inline self_type operator+(difference_type n) const |
182 |
| - { |
183 |
| - return self_type(p_b, m_offset + n); |
184 |
| - } |
185 |
| - |
186 |
| - inline self_type operator-(difference_type n) const |
187 |
| - { |
188 |
| - return self_type(p_b, m_offset - n); |
189 |
| - } |
190 |
| - |
191 |
| - inline self_type operator-(const self_type& rhs) const |
192 |
| - { |
193 |
| - self_type tmp(*this); |
194 |
| - tmp -= (m_offset - rhs.m_offset); |
195 |
| - return tmp; |
196 |
| - } |
197 |
| - |
198 |
| - inline std::size_t offset() const |
199 |
| - { |
200 |
| - return m_offset; |
201 |
| - } |
202 |
| - |
203 |
| - private: |
204 |
| - |
205 |
| - const B* p_b; |
206 |
| - std::size_t m_offset; |
207 |
| - }; |
208 |
| - |
209 |
| - template <class B> |
210 |
| - inline bool operator==(const pybackstrides_iterator<B>& lhs, |
211 |
| - const pybackstrides_iterator<B>& rhs) |
212 |
| - { |
213 |
| - return lhs.offset() == rhs.offset(); |
214 |
| - } |
215 |
| - |
216 |
| - template <class B> |
217 |
| - inline bool operator!=(const pybackstrides_iterator<B>& lhs, |
218 |
| - const pybackstrides_iterator<B>& rhs) |
219 |
| - { |
220 |
| - return !(lhs == rhs); |
221 |
| - } |
222 |
| - |
223 |
| - template <class B> |
224 |
| - inline bool operator<(const pybackstrides_iterator<B>& lhs, |
225 |
| - const pybackstrides_iterator<B>& rhs) |
226 |
| - { |
227 |
| - return lhs.offset() < rhs.offset(); |
228 |
| - } |
229 |
| - |
230 |
| - template <class B> |
231 |
| - inline bool operator<=(const pybackstrides_iterator<B>& lhs, |
232 |
| - const pybackstrides_iterator<B>& rhs) |
233 |
| - { |
234 |
| - return (lhs < rhs) || (lhs == rhs); |
235 |
| - } |
236 |
| - |
237 |
| - template <class B> |
238 |
| - inline bool operator>(const pybackstrides_iterator<B>& lhs, |
239 |
| - const pybackstrides_iterator<B>& rhs) |
240 |
| - { |
241 |
| - return !(lhs <= rhs); |
242 |
| - } |
243 |
| - |
244 |
| - template <class B> |
245 |
| - inline bool operator>=(const pybackstrides_iterator<B>& lhs, |
246 |
| - const pybackstrides_iterator<B>& rhs) |
247 |
| - { |
248 |
| - return !(lhs < rhs); |
249 |
| - } |
250 |
| - |
251 |
| - template <class A> |
252 |
| - class pyarray_backstrides |
253 |
| - { |
254 |
| - public: |
255 |
| - |
256 |
| - using self_type = pyarray_backstrides<A>; |
257 |
| - using array_type = A; |
258 |
| - using value_type = typename array_type::size_type; |
259 |
| - using const_reference = value_type; |
260 |
| - using reference = const_reference; |
261 |
| - using const_pointer = const value_type*; |
262 |
| - using pointer = const_pointer; |
263 |
| - using size_type = typename array_type::size_type; |
264 |
| - using difference_type = typename array_type::difference_type; |
265 |
| - |
266 |
| - using const_iterator = pybackstrides_iterator<self_type>; |
267 |
| - using iterator = const_iterator; |
268 |
| - using reverse_iterator = std::reverse_iterator<iterator>; |
269 |
| - using const_reverse_iterator = std::reverse_iterator<const_iterator>; |
270 |
| - |
271 |
| - pyarray_backstrides() = default; |
272 |
| - pyarray_backstrides(const array_type& a); |
273 |
| - |
274 |
| - bool empty() const; |
275 |
| - size_type size() const; |
276 |
| - |
277 |
| - value_type operator[](size_type i) const; |
278 |
| - |
279 |
| - const_reference front() const; |
280 |
| - const_reference back() const; |
281 |
| - |
282 |
| - const_iterator begin() const; |
283 |
| - const_iterator end() const; |
284 |
| - const_iterator cbegin() const; |
285 |
| - const_iterator cend() const; |
286 |
| - |
287 |
| - const_reverse_iterator rbegin() const; |
288 |
| - const_reverse_iterator rend() const; |
289 |
| - const_reverse_iterator crbegin() const; |
290 |
| - const_reverse_iterator crend() const; |
291 |
| - |
292 |
| - private: |
293 |
| - |
294 |
| - const array_type* p_a; |
295 |
| - }; |
296 |
| - |
297 | 104 | template <class T, layout_type L>
|
298 | 105 | struct xiterable_inner_types<pyarray<T, L>>
|
299 | 106 | : xcontainer_iterable_types<pyarray<T, L>>
|
@@ -425,101 +232,6 @@ namespace xt
|
425 | 232 | friend class pycontainer<pyarray<T, L>>;
|
426 | 233 | };
|
427 | 234 |
|
428 |
| - /************************************** |
429 |
| - * pyarray_backstrides implementation * |
430 |
| - **************************************/ |
431 |
| - |
432 |
| - template <class A> |
433 |
| - inline pyarray_backstrides<A>::pyarray_backstrides(const array_type& a) |
434 |
| - : p_a(&a) |
435 |
| - { |
436 |
| - } |
437 |
| - |
438 |
| - template <class A> |
439 |
| - inline bool pyarray_backstrides<A>::empty() const |
440 |
| - { |
441 |
| - return p_a->dimension() == 0; |
442 |
| - } |
443 |
| - |
444 |
| - template <class A> |
445 |
| - inline auto pyarray_backstrides<A>::size() const -> size_type |
446 |
| - { |
447 |
| - return p_a->dimension(); |
448 |
| - } |
449 |
| - |
450 |
| - template <class A> |
451 |
| - inline auto pyarray_backstrides<A>::operator[](size_type i) const -> value_type |
452 |
| - { |
453 |
| - value_type sh = p_a->shape()[i]; |
454 |
| - value_type res = sh == 1 ? 0 : (sh - 1) * p_a->strides()[i]; |
455 |
| - return res; |
456 |
| - } |
457 |
| - |
458 |
| - template <class A> |
459 |
| - inline auto pyarray_backstrides<A>::front() const -> const_reference |
460 |
| - { |
461 |
| - value_type sh = p_a->shape()[0]; |
462 |
| - value_type res = sh == 1 ? 0 : (sh - 1) * p_a->strides()[0]; |
463 |
| - return res; |
464 |
| - } |
465 |
| - |
466 |
| - template <class A> |
467 |
| - inline auto pyarray_backstrides<A>::back() const -> const_reference |
468 |
| - { |
469 |
| - auto index = p_a->size() - 1; |
470 |
| - value_type sh = p_a->shape()[index]; |
471 |
| - value_type res = sh == 1 ? 0 : (sh - 1) * p_a->strides()[index]; |
472 |
| - return res; |
473 |
| - } |
474 |
| - |
475 |
| - template <class A> |
476 |
| - inline auto pyarray_backstrides<A>::begin() const -> const_iterator |
477 |
| - { |
478 |
| - return cbegin(); |
479 |
| - } |
480 |
| - |
481 |
| - template <class A> |
482 |
| - inline auto pyarray_backstrides<A>::end() const -> const_iterator |
483 |
| - { |
484 |
| - return cend(); |
485 |
| - } |
486 |
| - |
487 |
| - template <class A> |
488 |
| - inline auto pyarray_backstrides<A>::cbegin() const -> const_iterator |
489 |
| - { |
490 |
| - return const_iterator(this, 0); |
491 |
| - } |
492 |
| - |
493 |
| - template <class A> |
494 |
| - inline auto pyarray_backstrides<A>::cend() const -> const_iterator |
495 |
| - { |
496 |
| - return const_iterator(this, size()); |
497 |
| - } |
498 |
| - |
499 |
| - template <class A> |
500 |
| - inline auto pyarray_backstrides<A>::rbegin() const -> const_reverse_iterator |
501 |
| - { |
502 |
| - return crbegin(); |
503 |
| - } |
504 |
| - |
505 |
| - template <class A> |
506 |
| - inline auto pyarray_backstrides<A>::rend() const -> const_reverse_iterator |
507 |
| - { |
508 |
| - return crend(); |
509 |
| - } |
510 |
| - |
511 |
| - template <class A> |
512 |
| - inline auto pyarray_backstrides<A>::crbegin() const -> const_reverse_iterator |
513 |
| - { |
514 |
| - return const_reverse_iterator(end()); |
515 |
| - } |
516 |
| - |
517 |
| - template <class A> |
518 |
| - inline auto pyarray_backstrides<A>::crend() const -> const_reverse_iterator |
519 |
| - { |
520 |
| - return const_reverse_iterator(begin()); |
521 |
| - } |
522 |
| - |
523 | 235 | /**************************
|
524 | 236 | * pyarray implementation *
|
525 | 237 | **************************/
|
|
0 commit comments