コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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));
        }