private void EnsureCapacity(long value) { if ((value & CurrentMask) == value) { return; } int bitsRequired = value < 0 ? 64 : PackedInts.BitsRequired(value); Debug.Assert(bitsRequired > Current.BitsPerValue); int valueCount = Size(); PackedInts.Mutable next = PackedInts.GetMutable(valueCount, bitsRequired, AcceptableOverheadRatio); PackedInts.Copy(Current, 0, next, 0, valueCount, PackedInts.DEFAULT_BUFFER_SIZE); Current = next; CurrentMask = Mask(Current.BitsPerValue); }
/// <param name="startBitsPerValue"> the initial number of bits per value, may grow depending on the data </param> /// <param name="valueCount"> the number of values </param> /// <param name="acceptableOverheadRatio"> an acceptable overhead ratio </param> public GrowableWriter(int startBitsPerValue, int valueCount, float acceptableOverheadRatio) { this.AcceptableOverheadRatio = acceptableOverheadRatio; Current = PackedInts.GetMutable(valueCount, startBitsPerValue, this.AcceptableOverheadRatio); CurrentMask = Mask(Current.BitsPerValue); }