Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ BinarySearchForSlot()

int System.Reflection.Internal.MemoryBlock.BinarySearchForSlot ( int rowCount,
int rowSize,
int referenceListOffset,
uint referenceValue,
bool isReferenceSmall )
inlinepackage

Definition at line 459 of file MemoryBlock.cs.

460 {
461 int num = 0;
462 int num2 = rowCount - 1;
463 uint num3 = PeekReferenceUnchecked(num * rowSize + referenceListOffset, isReferenceSmall);
464 uint num4 = PeekReferenceUnchecked(num2 * rowSize + referenceListOffset, isReferenceSmall);
465 if (num2 == 1)
466 {
467 if (referenceValue >= num4)
468 {
469 return num2;
470 }
471 return num;
472 }
473 while (num2 - num > 1)
474 {
475 if (referenceValue <= num3)
476 {
477 if (referenceValue != num3)
478 {
479 return num - 1;
480 }
481 return num;
482 }
483 if (referenceValue >= num4)
484 {
485 if (referenceValue != num4)
486 {
487 return num2 + 1;
488 }
489 return num2;
490 }
491 int num5 = (num + num2) / 2;
492 uint num6 = PeekReferenceUnchecked(num5 * rowSize + referenceListOffset, isReferenceSmall);
493 if (referenceValue > num6)
494 {
495 num = num5;
496 num3 = num6;
497 continue;
498 }
499 if (referenceValue < num6)
500 {
501 num2 = num5;
502 num4 = num6;
503 continue;
504 }
505 return num5;
506 }
507 return num;
508 }
uint PeekReferenceUnchecked(int offset, bool smallRefSize)

References System.Reflection.Internal.MemoryBlock.PeekReferenceUnchecked().

Referenced by System.Reflection.Metadata.Ecma335.TypeDefTableReader.FindTypeContainingField(), and System.Reflection.Metadata.Ecma335.TypeDefTableReader.FindTypeContainingMethod().