Add() public method

Add a short to the container. May generate a new container.
public Add ( ushort x ) : Container
x ushort short to be added
return Container
Esempio n. 1
0
        /// <summary>
        /// Add to the current bitmap all integers in [rangeStart,rangeEnd).
        /// </summary>
        /// <param name="rangeStart">inclusive beginning of range</param>
        /// <param name="rangeEnd">exclusive ending of range</param>
        public override Container Add(ushort rangeStart, ushort rangeEnd)
        {
            int indexstart = Utility.UnsignedBinarySearch(Content, 0, Cardinality, rangeStart);

            if (indexstart < 0)
            {
                indexstart = -indexstart - 1;
            }
            int indexend = Utility.UnsignedBinarySearch(Content, 0, Cardinality, (ushort)(rangeEnd - 1));

            if (indexend < 0)
            {
                indexend = -indexend - 1;
            }
            else
            {
                indexend++;
            }

            int rangelength    = rangeEnd - rangeStart;
            int newcardinality = indexstart + (Cardinality - indexend) + rangelength;

            if (newcardinality > DEFAULT_MAX_SIZE)
            {
                BitsetContainer a = this.ToBitsetContainer();
                return(a.Add(rangeStart, rangeEnd));
            }

            if (newcardinality >= this.Content.Length)
            {
                IncreaseCapacity(newcardinality);
            }

            Array.Copy(Content, indexend, this.Content, indexstart + rangelength, Cardinality - indexend);

            for (int k = 0; k < rangelength; ++k)
            {
                this.Content[k + indexstart] = (ushort)(rangeStart + k);
            }

            this.Cardinality = newcardinality;

            return(this);
        }