public override long FindCRC32(AnyObjectId objId) { int levelOne = objId.GetFirstByte(); int levelTwo = BinarySearchLevelTwo(objId, levelOne); if (levelTwo == -1) { throw new MissingObjectException(objId.Copy(), ObjectType.Unknown); } return(NB.DecodeUInt32(_crc32[levelOne], levelTwo << 2)); }
public override long FindOffset(AnyObjectId objId) { int levelOne = objId.GetFirstByte(); int levelTwo = BinarySearchLevelTwo(objId, levelOne); if (levelTwo == -1) { return(-1); } long p = NB.DecodeUInt32(_offset32[levelOne], levelTwo << 2); if ((p & IS_O64) != 0) { return(NB.DecodeUInt64(_offset64, (8 * (int)(p & ~IS_O64)))); } return(p); }
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); }