diff 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
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mupdf-source/thirdparty/zxing-cpp/core/src/Range.h	Mon Sep 15 11:43:07 2025 +0200
@@ -0,0 +1,59 @@
+/*
+* Copyright 2022 Axel Waggershauser
+*/
+// SPDX-License-Identifier: Apache-2.0
+
+#pragma once
+
+#include "ZXAlgorithms.h"
+
+#include <iterator>
+
+namespace ZXing {
+
+template <typename Iterator>
+struct StrideIter
+{
+	Iterator pos;
+	int stride;
+
+	using iterator_category = std::random_access_iterator_tag;
+	using difference_type   = typename std::iterator_traits<Iterator>::difference_type;
+	using value_type        = typename std::iterator_traits<Iterator>::value_type;
+	using pointer           = Iterator;
+	using reference         = typename std::iterator_traits<Iterator>::reference;
+
+	auto operator*() const { return *pos; }
+	auto operator[](int i) const { return *(pos + i * stride); }
+	StrideIter<Iterator>& operator++() { return pos += stride, *this; }
+	StrideIter<Iterator> operator++(int) { auto temp = *this; ++*this; return temp; }
+	bool operator!=(const StrideIter<Iterator>& rhs) const { return pos != rhs.pos; }
+	StrideIter<Iterator> operator+(int i) const { return {pos + i * stride, stride}; }
+	StrideIter<Iterator> operator-(int i) const { return {pos - i * stride, stride}; }
+	int operator-(const StrideIter<Iterator>& rhs) const { return narrow_cast<int>((pos - rhs.pos) / stride); }
+};
+
+template <typename Iterator>
+StrideIter(const Iterator&, int) -> StrideIter<Iterator>;
+
+
+template <typename Iterator>
+struct Range
+{
+	Iterator _begin, _end;
+
+	Range(Iterator b, Iterator e) : _begin(b), _end(e) {}
+
+	template <typename C>
+	Range(const C& c) : _begin(std::begin(c)), _end(std::end(c)) {}
+
+	Iterator begin() const noexcept { return _begin; }
+	Iterator end() const noexcept { return _end; }
+	explicit operator bool() const { return begin() < end(); }
+	int size() const { return narrow_cast<int>(end() - begin()); }
+};
+
+template <typename C>
+Range(const C&) -> Range<typename C::const_iterator>;
+
+} // namespace ZXing