summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp')
-rw-r--r--Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp108
1 files changed, 0 insertions, 108 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp
deleted file mode 100644
index 5102b715b07..00000000000
--- a/Build/source/texk/dvisvgm/dvisvgm-src/src/NumericRanges.hpp
+++ /dev/null
@@ -1,108 +0,0 @@
-/*************************************************************************
-** NumericRanges.hpp **
-** **
-** This file is part of dvisvgm -- a fast DVI to SVG converter **
-** Copyright (C) 2005-2021 Martin Gieseking <martin.gieseking@uos.de> **
-** **
-** This program is free software; you can redistribute it and/or **
-** modify it under the terms of the GNU General Public License as **
-** published by the Free Software Foundation; either version 3 of **
-** the License, or (at your option) any later version. **
-** **
-** This program is distributed in the hope that it will be useful, but **
-** WITHOUT ANY WARRANTY; without even the implied warranty of **
-** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the **
-** GNU General Public License for more details. **
-** **
-** You should have received a copy of the GNU General Public License **
-** along with this program; if not, see <http://www.gnu.org/licenses/>. **
-*************************************************************************/
-
-#ifndef NUMERICRANGES_HPP
-#define NUMERICRANGES_HPP
-
-#include <algorithm>
-#include <list>
-#include <utility>
-
-template <class T>
-class NumericRanges {
- public:
- using Range = std::pair<T,T>;
- using Container = std::list<Range>;
- using ConstIterator = typename Container::const_iterator;
-
- public:
- void addRange (T value) {addRange(value, value);}
- void addRange (T first, T last);
- bool valueExists (T value) const;
- size_t size () const {return _ranges.size();}
- ConstIterator begin () const {return _ranges.begin();}
- ConstIterator end () const {return _ranges.end();}
- const Container& ranges () const {return _ranges;}
-
- private:
- Container _ranges;
-};
-
-
-/** Adds a numeric range to the collection.
- * @param[in] first left bound of new range
- * @param[in] last right bound of new range */
-template <class T>
-void NumericRanges<T>::addRange (T first, T last) {
- if (first > last)
- std::swap(first, last);
- auto it = _ranges.begin();
- while (it != _ranges.end() && first > it->first+1 && first > it->second+1)
- ++it;
- if (it == _ranges.end() || last < it->first-1 || first > it->second+1)
- it = _ranges.insert(it, Range(first, last));
- else if ((first < it->first && last >= it->first-1) || (first <= it->second+1 && last > it->second)) {
- it->first = std::min(it->first, first);
- it->second = std::max(it->second, last);
- }
- // merge adjacent ranges
- if (it != _ranges.end()) {
- auto l = it;
- auto r = it;
- if (l == _ranges.begin())
- l = _ranges.end();
- else
- --l;
- ++r;
- bool l_modified = false;
- bool r_modified = false;
- if (l != _ranges.end() && l->second >= it->first-1) {
- l->first = std::min(l->first, it->first);
- l->second = std::max(l->second, it->second);
- l_modified = true;
- }
- if (r != _ranges.end() && r->first <= it->second+1) {
- r->first = std::min(r->first, it->first);
- r->second = std::max(r->second, it->second);
- r_modified = true;
- }
- if (l_modified || r_modified) {
- _ranges.erase(it);
- if (l_modified && r_modified && l->second >= r->first-1) {
- l->first = std::min(l->first, r->first);
- l->second = std::max(l->second, r->second);
- _ranges.erase(r);
- }
- }
- }
-}
-
-
-template <class T>
-bool NumericRanges<T>::valueExists (T value) const {
- auto it = std::lower_bound(_ranges.begin(), _ranges.end(), Range(value, 0),
- [](const Range &r1, const Range &r2) {
- return r1.first < r2.first;
- });
- return (it != _ranges.end() && it->first <= value && it->second >= value);
-}
-
-
-#endif