dnSpy.Contracts.Hex.HexBuffer.GetStartOfDataCore C# (CSharp) Method

GetStartOfDataCore() private method

private GetStartOfDataCore ( HexPosition start, bool validData ) : HexPosition
start HexPosition
validData bool
return HexPosition
		HexPosition GetStartOfDataCore(HexPosition start, bool validData) {
			var bestGuess = start;
			var pos = start;
			ulong d = 0x10000;
			while (pos > HexPosition.Zero) {
				var testPos = pos >= d ? pos - d : HexPosition.Zero;
				var info = GetSpanInfo(testPos);
				if (d < ulong.MaxValue)
					d <<= 1;
				if (info.HasData == validData && info.Span.End >= bestGuess) {
					bestGuess = info.Span.Start;
					pos = info.Span.Start;
					continue;
				}
				if (info.HasData != validData && info.Span.End == bestGuess)
					return bestGuess;
				pos = info.Span.End;
				var lastCorrectDataPos = info.HasData == validData ? info.Span.Start : (HexPosition?)null;
				bool foundOppositeData = info.HasData != validData;
				for (;;) {
					if (pos >= bestGuess)
						return lastCorrectDataPos ?? bestGuess;
					info = GetSpanInfo(pos);
					if (info.HasData == validData) {
						if (lastCorrectDataPos == null)
							lastCorrectDataPos = info.Span.Start;
					}
					else {
						lastCorrectDataPos = null;
						foundOppositeData = true;
					}
					if (info.Span.End >= bestGuess) {
						pos = lastCorrectDataPos ?? bestGuess;
						if (foundOppositeData)
							return pos;
						bestGuess = pos;
						break;
					}
					pos = info.Span.End;
				}
			}
			return bestGuess;
		}