summaryrefslogtreecommitdiff
path: root/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp')
-rw-r--r--Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp142
1 files changed, 0 insertions, 142 deletions
diff --git a/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp b/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp
deleted file mode 100644
index 3f5cb7a6e5f..00000000000
--- a/Build/source/texk/dvisvgm/dvisvgm-src/src/RangeMap.hpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/*************************************************************************
-** RangeMap.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 RANGEMAP_HPP
-#define RANGEMAP_HPP
-
-#include <algorithm>
-#include <ostream>
-#include <vector>
-
-
-class RangeMap {
- class Range {
- friend class RangeMap;
- public:
- Range () =default;
-
- Range (uint32_t min, uint32_t max, uint32_t minval) : _min(min), _max(max), _minval(minval) {
- if (_min > _max)
- std::swap(_min, _max);
- }
-
- uint32_t min () const {return _min;}
- uint32_t max () const {return _max;}
- uint32_t minval () const {return _minval;}
- uint32_t maxval () const {return valueAt(_max);}
- uint32_t valueAt (uint32_t c) const {return c-_min+_minval;}
- uint32_t numKeys () const {return _max-_min+1;}
- bool operator < (const Range &r) const {return _min < r._min;}
- std::ostream& write (std::ostream &os) const;
-
- protected:
- void min (uint32_t m) {_min = m;}
- void max (uint32_t m) {_max = m;}
- void setMinAndAdaptValue (uint32_t c) {_minval = valueAt(c); _min = c;}
- bool join (const Range &r);
-
- private:
- uint32_t _min=0, _max=0;
- uint32_t _minval=0;
- };
-
- using Ranges = std::vector<Range>;
-
- class Iterator {
- friend class RangeMap;
- public:
- void operator ++ () {
- if (_currentKey < _rangeIterator->max())
- ++_currentKey;
- else {
- if (++_rangeIterator != _rangeMap._ranges.end())
- _currentKey = _rangeIterator->min();
- }
- }
-
- void operator -- () {
- if (_currentKey > _rangeIterator->min())
- --_currentKey;
- else {
- if (_rangeIterator != _rangeMap._ranges.begin())
- _currentKey = (--_rangeIterator)->max();
- }
- }
-
- std::pair<uint32_t,uint32_t> operator * () const {
- return std::pair<uint32_t,uint32_t>(_currentKey, _rangeMap.valueAt(_currentKey));
- }
-
- bool operator == (const Iterator &it) const {
- bool ret = (_rangeIterator == it._rangeIterator);
- if (ret && _rangeIterator != _rangeMap._ranges.end())
- ret = (_currentKey == it._currentKey);
- return ret;
- }
-
- bool operator != (const Iterator &it) const {
- bool ret = (_rangeIterator != it._rangeIterator);
- if (!ret && _rangeIterator != _rangeMap._ranges.end())
- ret = _currentKey != it._currentKey;
- return ret;
- }
-
- protected:
- Iterator (const RangeMap &rangeMap, Ranges::const_iterator it) : _rangeMap(rangeMap), _rangeIterator(it), _currentKey() {
- if (_rangeIterator != _rangeMap._ranges.end())
- _currentKey = _rangeIterator->min();
- }
-
- private:
- const RangeMap &_rangeMap;
- Ranges::const_iterator _rangeIterator;
- uint32_t _currentKey;
- };
-
- public:
- void addRange (uint32_t first, uint32_t last, uint32_t cid);
- bool valueExists (uint32_t c) const {return lookup(c) >= 0;}
- uint32_t valueAt (uint32_t c) const;
- uint32_t minKey () const {return _ranges.empty() ? 0 : _ranges.front().min();}
- uint32_t maxKey () const {return _ranges.empty() ? 0 : _ranges.back().max();}
- size_t numRanges () const {return _ranges.size();}
- size_t numValues () const;
- bool empty () const {return _ranges.empty();}
- void clear () {_ranges.clear();}
- const Range& getRange (size_t n) const {return _ranges[n];}
- Iterator begin () const {return Iterator(*this, _ranges.begin());}
- Iterator end () const {return Iterator(*this, _ranges.end());}
- std::ostream& write (std::ostream &os) const;
-
- protected:
- void adaptNeighbors (Ranges::iterator it);
- int lookup (uint32_t c) const;
- const Range& rangeAt (size_t n) const {return _ranges[n];}
-
- private:
- Ranges _ranges;
-};
-
-
-inline std::ostream& operator << (std::ostream& os, const RangeMap &rangemap) {
- return rangemap.write(os);
-}
-
-#endif