public void Insert(T item)
        {
            //byte f = this.fingerprintFunction(item);
            //uint fullHashCode = (uint)item.GetHashCode();
            HashedItem hashedItem = new HashedItem(item, this.TABLE_SIZE);

            int[] buckets = new int[2];
            for (int i = 0; i < 2; i++)
            {
                buckets[i] = this.table[hashedItem.Hash[i]];
            }

            /*
             * for (int i = 0; i < 2; i++) {
             *  if(b[i] == null) {
             *      this.dict.Add(h[i], f);
             *      return;
             *  }
             * }*/
            for (int i = 0; i < 2; i++)
            {
                if (buckets[i] >> 24 != 0)  //there is room in the bucket for the fingerprint
                {
                    this.table[hashedItem.Hash[i]] = this.append(buckets[i], hashedItem.Fingerprint);
                    return;
                }
            }
            //we will need to do some kicking
            //1. "randomly" pick bucket 1 or 2
            this.kickMove(hashedItem.Fingerprint, hashedItem.Hash[hashedItem.Fingerprint % 1], MAX_KICKS);
        }
        public bool Contains(T item)
        {
            HashedItem hashedItem = new HashedItem(item, this.TABLE_SIZE);

            for (int i = 0; i < 2; i++)
            {
                if (this.bucketContains(this.table[hashedItem.Hash[i]], hashedItem.Fingerprint))
                {
                    return(true);
                }
            }
            return(false);
        }