internal override bool AddIfNotPresent(T item) { if (!IsWithinRange(item)) { throw new ArgumentOutOfRangeException(nameof(item)); } bool ret = _underlying.AddIfNotPresent(item); VersionCheck(); #if DEBUG Debug.Assert(this.versionUpToDate() && root == _underlying.FindRange(_min, _max)); #endif return(ret); }
private void VersionCheckImpl() { if (version != _underlying.version) { root = _underlying.FindRange(_min, _max, _lBoundActive, _uBoundActive); version = _underlying.version; count = 0; InOrderTreeWalk(n => { count++; return(true); }); } }
public TreeSubSet(SortedSet <T> Underlying, T Min, T Max, bool lowerBoundActive, bool upperBoundActive) : base(Underlying.Comparer) { _underlying = Underlying; _min = Min; _max = Max; _lBoundActive = lowerBoundActive; _uBoundActive = upperBoundActive; root = _underlying.FindRange(_min, _max, _lBoundActive, _uBoundActive); // root is first element within range count = 0; version = -1; VersionCheckImpl(); }