private int BinarySearchLevelTwo(AnyObjectId objId, int levelOne) { int[] data = _names[levelOne]; var high = (int)((uint)(_offset32[levelOne].Length) >> 2); if (high == 0) { return(-1); } int low = 0; do { var mid = (int)((uint)(low + high) >> 1); int mid4 = mid << 2; int cmp = objId.CompareTo(data, mid4 + mid); if (cmp < 0) { high = mid; } else if (cmp == 0) { return(mid); } else { low = mid + 1; } } while (low < high); return(-1); }
public override long FindOffset(AnyObjectId objId) { int levelOne = objId.GetFirstByte(); byte[] data = _idxdata[levelOne]; if (data == null) { return(-1); } int high = data.Length / (4 + AnyObjectId.ObjectIdLength); int low = 0; do { int mid = (low + high) / 2; int pos = ((4 + AnyObjectId.ObjectIdLength) * mid) + 4; int cmp = objId.CompareTo(data, pos); if (cmp < 0) { high = mid; } else if (cmp == 0) { uint b0 = data[pos - 4] & (uint)0xff; uint b1 = data[pos - 3] & (uint)0xff; uint b2 = data[pos - 2] & (uint)0xff; uint b3 = data[pos - 1] & (uint)0xff; return((((long)b0) << 24) | (b1 << 16) | (b2 << 8) | (b3)); } else { low = mid + 1; } } while (low < high); return(-1); }