InsertNewKeyValueAt() public method

insert a new key, it is assumed that it does not exist
public InsertNewKeyValueAt ( int i, ushort key, Container value ) : void
i int
key ushort
value Container
return void
Example #1
0
        /// <summary>
        /// Adds the specified value to the current bitmap
        /// </summary>
        /// <param name="x">Value to be added</param>
        public void Add(int x)
        {
            ushort highBits       = Utility.GetHighBits(x);
            int    containerIndex = containers.GetIndex(highBits);

            if (containerIndex >= 0)
            {
                // a container exists at this index already.
                // find the right container, get the low order bits to add to the container and add them
                containers.SetContainerAtIndex(containerIndex, containers.GetContainerAtIndex(containerIndex).Add(Utility.GetLowBits(x)));
            }
            else
            {
                // no container exists for this index
                // create a new ArrayContainer, since it will only hold one integer to start
                // get the low order bits and att to the newly created container
                // add the newly created container to the array of containers
                ArrayContainer ac = new ArrayContainer();
                containers.InsertNewKeyValueAt(-containerIndex - 1, highBits, ac.Add(Utility.GetLowBits(x)));
            }
        }
Example #2
0
        /// <summary>
        /// If the given index is not in the set add it, otherwise remove it.
        /// </summary>
        /// <param name="index">The index to flip</param>
        public void Flip(int x)
        {
            ushort hb = Utility.GetHighBits(x);
            int    i  = containers.GetIndex(hb);

            if (i >= 0)
            {
                Container c = containers.GetContainerAtIndex(i).Flip(Utility.GetLowBits(x));
                if (c.GetCardinality() > 0)
                {
                    containers.SetContainerAtIndex(i, c);
                }
                else
                {
                    containers.RemoveAtIndex(i);
                }
            }
            else
            {
                ArrayContainer newac = new ArrayContainer();
                containers.InsertNewKeyValueAt(-i - 1, hb, newac.Add(Utility.GetLowBits(x)));
            }
        }