/// <exception cref="System.IO.IOException"></exception> internal override int EstimateSize(AnyObjectId noteOn, ObjectReader or) { // If most of this fan-out is full, estimate it should still be split. if (LeafBucket.MAX_SIZE * 3 / 4 <= cnt) { return(1 + LeafBucket.MAX_SIZE); } // Due to the uniform distribution of ObjectIds, having less nodes full // indicates a good chance the total number of children below here // is less than the MAX_SIZE split point. Get a more accurate count. MutableObjectId id = new MutableObjectId(); id.FromObjectId(noteOn); int sz = 0; for (int cell = 0; cell < 256; cell++) { NoteBucket b = table[cell]; if (b == null) { continue; } id.SetByte(prefixLen >> 1, cell); sz += b.EstimateSize(id, or); if (LeafBucket.MAX_SIZE < sz) { break; } } return(sz); }
/// <exception cref="System.IO.IOException"></exception> internal override Sharpen.Iterator <Note> Iterator(AnyObjectId objId, ObjectReader reader) { MutableObjectId id = new MutableObjectId(); id.FromObjectId(objId); return(new _Iterator_138(this, id, reader)); }