// p * 5 private int BinarySearchLevelTwo(AnyObjectId objId, int levelOne) { int[] data = names[levelOne]; int high = (int)(((uint)offset32[levelOne].Length) >> 2); if (high == 0) { return -1; } int low = 0; do { int mid = (int)(((uint)(low + high)) >> 1); int mid4 = mid << 2; int cmp; cmp = objId.CompareTo(data, mid4 + mid); // mid * 5 if (cmp < 0) { high = mid; } else { if (cmp == 0) { return mid; } else { low = mid + 1; } } } while (low < high); return -1; }
internal override long FindOffset(AnyObjectId objId) { int levelOne = objId.FirstByte; byte[] data = idxdata[levelOne]; if (data == null) { return -1; } int high = data.Length / (4 + Constants.OBJECT_ID_LENGTH); int low = 0; do { int mid = (int)(((uint)(low + high)) >> 1); int pos = IdOffset(mid); int cmp = objId.CompareTo(data, pos); if (cmp < 0) { high = mid; } else { if (cmp == 0) { int b0 = data[pos - 4] & unchecked((int)(0xff)); int b1 = data[pos - 3] & unchecked((int)(0xff)); int b2 = data[pos - 2] & unchecked((int)(0xff)); int b3 = data[pos - 1] & unchecked((int)(0xff)); return (((long)b0) << 24) | (b1 << 16) | (b2 << 8) | (b3); } else { low = mid + 1; } } } while (low < high); return -1; }