9[DebuggerDisplay(
"{GetDebuggerDisplay(),nq}")]
76 if (displayedBytes <
Length)
91 if (
offset < displayedBytes)
93 return debuggerDisplay.Insert(
offset * 3,
"*");
95 if (displayedBytes ==
Length)
97 return debuggerDisplay +
"*";
99 return debuggerDisplay +
"*...";
129 return (uint)(*ptr | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24));
139 numberOfBytesRead = 0;
145 numberOfBytesRead = 1;
152 numberOfBytesRead = 2;
153 return ((b & 0x3F) << 8) | ptr[1];
156 else if ((b & 0x20) == 0 && num >= 4)
158 numberOfBytesRead = 4;
159 return ((b & 0x1F) << 24) | (ptr[1] << 16) | (ptr[2] << 8) | ptr[3];
161 numberOfBytesRead = 0;
170 return (ushort)(*ptr | (ptr[1] << 8));
223 return new Guid(*ptr | (ptr[1] << 8) | (ptr[2] << 16) | (ptr[3] << 24), (
short)(ptr[4] | (ptr[5] << 8)), (
short)(ptr[6] | (ptr[7] << 8)), ptr[8], ptr[9], ptr[10], ptr[11], ptr[12], ptr[13], ptr[14], ptr[15]);
256 for (ptr3 = ptr; ptr3 < ptr2; ptr3++)
259 if (b == 0 || b == terminator)
264 int result = (numberOfBytesRead = (int)(ptr3 - ptr));
275 for (
int i = startOffset; i <
Length; i++)
292 int firstDifferenceIndex;
296 int numberOfBytesRead;
305 int firstDifferenceIndex;
316 int numberOfBytesRead;
331 while (num <
text.Length && ptr3 != ptr2)
334 if (b == 0 || b == terminator)
345 firstDifferenceIndex = num;
352 firstDifferenceIndex = num;
353 bool flag = num ==
text.Length;
354 bool flag2 = ptr3 == ptr2 || *ptr3 == 0 || *ptr3 == terminator;
374 for (
int i = 0; i < asciiPrefix.Length; i++)
376 if (asciiPrefix[i] != *ptr)
390 for (
int i = 0; i < asciiString.Length; i++)
396 if (*ptr != asciiString[i])
398 return *ptr - asciiString[i];
437 int num2 = asciiKeys.Length - 1;
440 int num3 = num + (num2 - num >> 1);
441 string asciiString = asciiKeys[num3];
459 internal int BinarySearchForSlot(
int rowCount,
int rowSize,
int referenceListOffset, uint referenceValue,
bool isReferenceSmall)
462 int num2 = rowCount - 1;
467 if (referenceValue >= num4)
473 while (num2 - num > 1)
475 if (referenceValue <= num3)
477 if (referenceValue != num3)
483 if (referenceValue >= num4)
485 if (referenceValue != num4)
491 int num5 = (num + num2) / 2;
493 if (referenceValue > num6)
499 if (referenceValue < num6)
510 internal int BinarySearchReference(
int rowCount,
int rowSize,
int referenceOffset, uint referenceValue,
bool isReferenceSmall)
513 int num2 = rowCount - 1;
516 int num3 = (num + num2) / 2;
518 if (referenceValue > num4)
523 if (referenceValue < num4)
533 internal int BinarySearchReference(
int[] ptrTable,
int rowSize,
int referenceOffset, uint referenceValue,
bool isReferenceSmall)
536 int num2 = ptrTable.Length - 1;
539 int num3 = (num + num2) / 2;
541 if (referenceValue > num4)
546 if (referenceValue < num4)
556 internal void BinarySearchReferenceRange(
int rowCount,
int rowSize,
int referenceOffset, uint referenceValue,
bool isReferenceSmall, out
int startRowNumber, out
int endRowNumber)
558 int num =
BinarySearchReference(rowCount, rowSize, referenceOffset, referenceValue, isReferenceSmall);
565 startRowNumber = num;
566 while (startRowNumber > 0 &&
PeekReferenceUnchecked((startRowNumber - 1) * rowSize + referenceOffset, isReferenceSmall) == referenceValue)
571 while (endRowNumber + 1 < rowCount &&
PeekReferenceUnchecked((endRowNumber + 1) * rowSize + referenceOffset, isReferenceSmall) == referenceValue)
577 internal void BinarySearchReferenceRange(
int[] ptrTable,
int rowSize,
int referenceOffset, uint referenceValue,
bool isReferenceSmall, out
int startRowNumber, out
int endRowNumber)
579 int num =
BinarySearchReference(ptrTable, rowSize, referenceOffset, referenceValue, isReferenceSmall);
586 startRowNumber = num;
587 while (startRowNumber > 0 &&
PeekReferenceUnchecked((ptrTable[startRowNumber - 1] - 1) * rowSize + referenceOffset, isReferenceSmall) == referenceValue)
592 while (endRowNumber + 1 < ptrTable.Length &&
PeekReferenceUnchecked((ptrTable[endRowNumber + 1] - 1) * rowSize + referenceOffset, isReferenceSmall) == referenceValue)
600 int i = referenceOffset;
604 if (num == referenceValue)
614 int i = referenceOffset;
617 for (; i <
length; i += rowSize)
629 internal int[]
BuildPtrTable(
int numberOfRows,
int rowSize,
int referenceOffset,
bool isReferenceSmall)
631 int[]
array =
new int[numberOfRows];
632 uint[] unsortedReferences =
new uint[numberOfRows];
633 for (
int i = 0; i <
array.Length; i++)
637 ReadColumn(unsortedReferences, rowSize, referenceOffset, isReferenceSmall);
638 Array.
Sort(
array, (
int a,
int b) => unsortedReferences[a - 1].CompareTo(unsortedReferences[b - 1]));
642 private void ReadColumn(uint[] result,
int rowSize,
int referenceOffset,
bool isReferenceSmall)
644 int num = referenceOffset;
657 int numberOfBytesRead;
static void Sort(Array array)
static string ToString(byte[] value, int startIndex, int length)
static readonly bool IsLittleEndian
static byte Min(byte val1, byte val2)
static unsafe byte[] ReadBytes(byte *buffer, int byteCount)
static unsafe string DecodeUtf8(byte *bytes, int byteCount, byte[]? prefix, MetadataStringDecoder utf8Decoder)
static void ValueOverflow()
static void OutOfBounds()
static void ReferenceOverflow()
void ReadColumn(uint[] result, int rowSize, int referenceOffset, bool isReferenceSmall)
int PeekReference(int offset, bool smallRefSize)
unsafe ushort PeekUInt16(int offset)
unsafe MemoryBlock GetMemoryBlockAt(int offset, int length)
bool IsOrderedByReferenceAscending(int rowSize, int referenceOffset, bool isReferenceSmall)
bool Utf8NullTerminatedEquals(int offset, string text, MetadataStringDecoder utf8Decoder, char terminator, bool ignoreCase)
int BinarySearchReference(int rowCount, int rowSize, int referenceOffset, uint referenceValue, bool isReferenceSmall)
int PeekHeapReference(int offset, bool smallRefSize)
unsafe int IndexOfUnchecked(byte b, int start)
void BinarySearchReferenceRange(int[] ptrTable, int rowSize, int referenceOffset, uint referenceValue, bool isReferenceSmall, out int startRowNumber, out int endRowNumber)
int LinearSearchReference(int rowSize, int referenceOffset, uint referenceValue, bool isReferenceSmall)
static unsafe MemoryBlock CreateChecked(byte *buffer, int length)
unsafe string PeekUtf16(int offset, int byteCount)
unsafe int Utf8NullTerminatedOffsetOfAsciiChar(int startOffset, char asciiChar)
unsafe readonly byte * Pointer
unsafe int PeekCompressedInteger(int offset, out int numberOfBytesRead)
unsafe string GetDebuggerDisplay()
unsafe byte[] PeekBytes(int offset, int byteCount)
bool PeekHeapValueOffsetAndSize(int index, out int offset, out int size)
unsafe string GetDebuggerDisplay(int offset)
unsafe string PeekUtf8NullTerminated(int offset, byte[]? prefix, MetadataStringDecoder utf8Decoder, out int numberOfBytesRead, char terminator='\0')
int BinarySearchForSlot(int rowCount, int rowSize, int referenceListOffset, uint referenceValue, bool isReferenceSmall)
unsafe bool Utf8NullTerminatedStringStartsWithAsciiPrefix(int offset, string asciiPrefix)
unsafe int GetUtf8NullTerminatedLength(int offset, out int numberOfBytesRead, char terminator='\0')
unsafe Guid PeekGuid(int offset)
void CheckBounds(int offset, int byteCount)
int[] BuildPtrTable(int numberOfRows, int rowSize, int referenceOffset, bool isReferenceSmall)
uint PeekReferenceUnchecked(int offset, bool smallRefSize)
int BinarySearch(string[] asciiKeys, int offset)
unsafe int CompareUtf8NullTerminatedStringWithAsciiString(int offset, string asciiString)
void BinarySearchReferenceRange(int rowCount, int rowSize, int referenceOffset, uint referenceValue, bool isReferenceSmall, out int startRowNumber, out int endRowNumber)
unsafe string PeekUtf8(int offset, int byteCount)
bool Utf8NullTerminatedStartsWith(int offset, string text, MetadataStringDecoder utf8Decoder, char terminator, bool ignoreCase)
unsafe byte PeekByte(int offset)
int BinarySearchReference(int[] ptrTable, int rowSize, int referenceOffset, uint referenceValue, bool isReferenceSmall)
unsafe MemoryBlock(byte *buffer, int length)
int PeekInt32(int offset)
int IndexOf(byte b, int start)
unsafe uint PeekUInt32(int offset)
uint PeekTaggedReference(int offset, bool smallRefSize)
unsafe FastComparisonResult Utf8NullTerminatedFastCompare(int offset, string text, int textStart, out int firstDifferenceIndex, char terminator, bool ignoreCase)
string GetDebuggerDisplay(out int displayedBytes)