diff options
| author | Neil <nyamatongwe@gmail.com> | 2021-01-29 20:51:34 +1100 | 
|---|---|---|
| committer | Neil <nyamatongwe@gmail.com> | 2021-01-29 20:51:34 +1100 | 
| commit | 54341053b273c905afa7503d8dadcc4c46a0d2d3 (patch) | |
| tree | e25fe4ee686d7d59068f46746006d62a8ca30692 /lexlib/SparseState.h | |
| parent | ba8b1a91525dd90f8fdcc75480f37815fecce2d2 (diff) | |
| download | scintilla-mirror-54341053b273c905afa7503d8dadcc4c46a0d2d3.tar.gz | |
Remove Lexilla files from Scintilla
Diffstat (limited to 'lexlib/SparseState.h')
| -rw-r--r-- | lexlib/SparseState.h | 106 | 
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  | 
