Mercurial > hgrepos > Python2 > PyMuPDF
comparison mupdf-source/thirdparty/zxing-cpp/core/src/Range.h @ 2:b50eed0cc0ef upstream
ADD: MuPDF v1.26.7: the MuPDF source as downloaded by a default build of PyMuPDF 1.26.4.
The directory name has changed: no version number in the expanded directory now.
| author | Franz Glasner <fzglas.hg@dom66.de> |
|---|---|
| date | Mon, 15 Sep 2025 11:43:07 +0200 |
| parents | |
| children |
comparison
equal
deleted
inserted
replaced
| 1:1d09e1dec1d9 | 2:b50eed0cc0ef |
|---|---|
| 1 /* | |
| 2 * Copyright 2022 Axel Waggershauser | |
| 3 */ | |
| 4 // SPDX-License-Identifier: Apache-2.0 | |
| 5 | |
| 6 #pragma once | |
| 7 | |
| 8 #include "ZXAlgorithms.h" | |
| 9 | |
| 10 #include <iterator> | |
| 11 | |
| 12 namespace ZXing { | |
| 13 | |
| 14 template <typename Iterator> | |
| 15 struct StrideIter | |
| 16 { | |
| 17 Iterator pos; | |
| 18 int stride; | |
| 19 | |
| 20 using iterator_category = std::random_access_iterator_tag; | |
| 21 using difference_type = typename std::iterator_traits<Iterator>::difference_type; | |
| 22 using value_type = typename std::iterator_traits<Iterator>::value_type; | |
| 23 using pointer = Iterator; | |
| 24 using reference = typename std::iterator_traits<Iterator>::reference; | |
| 25 | |
| 26 auto operator*() const { return *pos; } | |
| 27 auto operator[](int i) const { return *(pos + i * stride); } | |
| 28 StrideIter<Iterator>& operator++() { return pos += stride, *this; } | |
| 29 StrideIter<Iterator> operator++(int) { auto temp = *this; ++*this; return temp; } | |
| 30 bool operator!=(const StrideIter<Iterator>& rhs) const { return pos != rhs.pos; } | |
| 31 StrideIter<Iterator> operator+(int i) const { return {pos + i * stride, stride}; } | |
| 32 StrideIter<Iterator> operator-(int i) const { return {pos - i * stride, stride}; } | |
| 33 int operator-(const StrideIter<Iterator>& rhs) const { return narrow_cast<int>((pos - rhs.pos) / stride); } | |
| 34 }; | |
| 35 | |
| 36 template <typename Iterator> | |
| 37 StrideIter(const Iterator&, int) -> StrideIter<Iterator>; | |
| 38 | |
| 39 | |
| 40 template <typename Iterator> | |
| 41 struct Range | |
| 42 { | |
| 43 Iterator _begin, _end; | |
| 44 | |
| 45 Range(Iterator b, Iterator e) : _begin(b), _end(e) {} | |
| 46 | |
| 47 template <typename C> | |
| 48 Range(const C& c) : _begin(std::begin(c)), _end(std::end(c)) {} | |
| 49 | |
| 50 Iterator begin() const noexcept { return _begin; } | |
| 51 Iterator end() const noexcept { return _end; } | |
| 52 explicit operator bool() const { return begin() < end(); } | |
| 53 int size() const { return narrow_cast<int>(end() - begin()); } | |
| 54 }; | |
| 55 | |
| 56 template <typename C> | |
| 57 Range(const C&) -> Range<typename C::const_iterator>; | |
| 58 | |
| 59 } // namespace ZXing |
