protected IEnumerable <HexSpan> GetValidSpansReverse(HexBuffer buffer, HexPosition start, HexPosition lowerBounds) { var pos = start; bool fullSpan = true; for (;;) { var span = buffer.GetPreviousValidSpan(pos, lowerBounds, fullSpan); if (span == null) { break; } var newStart = HexPosition.Max(lowerBounds, span.Value.Start); var newEnd = HexPosition.Min(pos + 1, span.Value.End); if (newStart < newEnd) { yield return(HexSpan.FromBounds(newStart, newEnd)); } if (span.Value.Start == 0) { break; } pos = span.Value.Start - 1; fullSpan = false; } }