aboutsummaryrefslogtreecommitdiffhomepage
path: root/lexlib/SparseState.h
diff options
context:
space:
mode:
authorNeil <nyamatongwe@gmail.com>2021-01-29 20:51:34 +1100
committerNeil <nyamatongwe@gmail.com>2021-01-29 20:51:34 +1100
commit54341053b273c905afa7503d8dadcc4c46a0d2d3 (patch)
treee25fe4ee686d7d59068f46746006d62a8ca30692 /lexlib/SparseState.h
parentba8b1a91525dd90f8fdcc75480f37815fecce2d2 (diff)
downloadscintilla-mirror-54341053b273c905afa7503d8dadcc4c46a0d2d3.tar.gz
Remove Lexilla files from Scintilla
Diffstat (limited to 'lexlib/SparseState.h')
-rw-r--r--lexlib/SparseState.h106
1 files changed, 0 insertions, 106 deletions
diff --git a/lexlib/SparseState.h b/lexlib/SparseState.h
deleted file mode 100644
index 6286c76af..000000000
--- a/lexlib/SparseState.h
+++ /dev/null
@@ -1,106 +0,0 @@
-// Scintilla source code edit control
-/** @file SparseState.h
- ** Hold lexer state that may change rarely.
- ** This is often per-line state such as whether a particular type of section has been entered.
- ** A state continues until it is changed.
- **/
-// Copyright 2011 by Neil Hodgson <neilh@scintilla.org>
-// The License.txt file describes the conditions under which this software may be distributed.
-
-#ifndef SPARSESTATE_H
-#define SPARSESTATE_H
-
-namespace Scintilla {
-
-template <typename T>
-class SparseState {
- struct State {
- Sci_Position position;
- T value;
- constexpr State(Sci_Position position_, T value_) noexcept : position(position_), value(value_) {
- }
- inline bool operator<(const State &other) const noexcept {
- return position < other.position;
- }
- inline bool operator==(const State &other) const noexcept {
- return (position == other.position) && (value == other.value);
- }
- };
- Sci_Position positionFirst;
- typedef std::vector<State> stateVector;
- stateVector states;
-
- typename stateVector::iterator Find(Sci_Position position) {
- const State searchValue(position, T());
- return std::lower_bound(states.begin(), states.end(), searchValue);
- }
-
-public:
- explicit SparseState(Sci_Position positionFirst_=-1) {
- positionFirst = positionFirst_;
- }
- void Set(Sci_Position position, T value) {
- Delete(position);
- if (states.empty() || (value != states[states.size()-1].value)) {
- states.push_back(State(position, value));
- }
- }
- T ValueAt(Sci_Position position) {
- if (states.empty())
- return T();
- if (position < states[0].position)
- return T();
- typename stateVector::iterator low = Find(position);
- if (low == states.end()) {
- return states[states.size()-1].value;
- } else {
- if (low->position > position) {
- --low;
- }
- return low->value;
- }
- }
- bool Delete(Sci_Position position) {
- typename stateVector::iterator low = Find(position);
- if (low != states.end()) {
- states.erase(low, states.end());
- return true;
- }
- return false;
- }
- size_t size() const {
- return states.size();
- }
-
- // Returns true if Merge caused a significant change
- bool Merge(const SparseState<T> &other, Sci_Position ignoreAfter) {
- // Changes caused beyond ignoreAfter are not significant
- Delete(ignoreAfter+1);
-
- bool different = true;
- bool changed = false;
- typename stateVector::iterator low = Find(other.positionFirst);
- if (static_cast<size_t>(states.end() - low) == other.states.size()) {
- // Same number in other as after positionFirst in this
- different = !std::equal(low, states.end(), other.states.begin());
- }
- if (different) {
- if (low != states.end()) {
- states.erase(low, states.end());
- changed = true;
- }
- typename stateVector::const_iterator startOther = other.states.begin();
- if (!states.empty() && !other.states.empty() && states.back().value == startOther->value)
- ++startOther;
- if (startOther != other.states.end()) {
- states.insert(states.end(), startOther, other.states.end());
- changed = true;
- }
- }
- return changed;
- }
-};
-
-}
-
-#endif