コード例 #1
0
        /// Removes the element corresponding to the key. Does nothing if the
        /// <summary>
        /// key is not present.
        /// </summary>
        /// <summary>
        /// @param key the key that needs to be removed
        /// </summary>
        /// <summary>
        /// @return the value of key, or null if the key was not found.
        /// </summary>
        public int Remove(int key)
        {
            var tab   = _table;
            var hash  = key;
            var index = (hash & 0x7FFFFFFF) % tab.Length;

            for (IntHashtableEntry e = tab[index], prev = null; e != null; prev = e, e = e.Next)
            {
                if (e.Hash == hash && e.key == key)
                {
                    if (prev != null)
                    {
                        prev.Next = e.Next;
                    }
                    else
                    {
                        tab[index] = e.Next;
                    }

                    --Size;
                    return(e.value);
                }
            }
            return(0);
        }
コード例 #2
0
        /// Rehashes the content of the table into a bigger table.
        // This method is called automatically when the hashtable's
        // size exceeds the threshold.
        virtual protected void Rehash()
        {
            int oldCapacity = table.Length;

            IntHashtableEntry[] oldTable = table;

            int newCapacity = oldCapacity * 2 + 1;

            IntHashtableEntry[] newTable = new IntHashtableEntry[newCapacity];

            threshold = (int)(newCapacity * loadFactor);
            table     = newTable;

            for (int i = oldCapacity; i-- > 0;)
            {
                for (IntHashtableEntry old = oldTable[i]; old != null;)
                {
                    IntHashtableEntry e = old;
                    old = old.next;

                    int index = (e.hash & 0x7FFFFFFF) % newCapacity;
                    e.next          = newTable[index];
                    newTable[index] = e;
                }
            }
        }
コード例 #3
0
        virtual public int[] GetKeys()
        {
            int[]             res   = new int[count];
            int               ptr   = 0;
            int               index = table.Length;
            IntHashtableEntry entry = null;

            while (true)
            {
                if (entry == null)
                {
                    while ((index-- > 0) && ((entry = table[index]) == null))
                    {
                        ;
                    }
                }
                if (entry == null)
                {
                    break;
                }
                IntHashtableEntry e = entry;
                entry      = e.next;
                res[ptr++] = e.key;
            }
            return(res);
        }
コード例 #4
0
        public int[] GetKeys()
        {
            var res   = new int[Size];
            var ptr   = 0;
            var index = _table.Length;
            IntHashtableEntry entry = null;

            while (true)
            {
                if (entry == null)
                {
                    while ((index-- > 0) && ((entry = _table[index]) == null))
                    {
                        ;
                    }
                }

                if (entry == null)
                {
                    break;
                }

                var e = entry;
                entry      = e.Next;
                res[ptr++] = e.key;
            }
            return(res);
        }
コード例 #5
0
            virtual protected internal IntHashtableEntry Clone()
            {
                IntHashtableEntry entry = new IntHashtableEntry();

                entry.hash  = hash;
                entry.key   = key;
                entry.value = value;
                entry.next  = (next != null) ? next.Clone() : null;
                return(entry);
            }
コード例 #6
0
            protected internal IntHashtableEntry Clone()
            {
                IntHashtableEntry entry = new IntHashtableEntry();

                entry.Hash  = Hash;
                entry.key   = key;
                entry.value = value;
                entry.Next  = (Next != null) ? Next.Clone() : null;
                return(entry);
            }
コード例 #7
0
            protected internal IntHashtableEntry Clone()
            {
                var entry = new IntHashtableEntry
                {
                    Hash  = Hash,
                    key   = key,
                    value = value,
                    Next  = (Next != null) ? Next.Clone() : null
                };

                return(entry);
            }
コード例 #8
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public int this[int key]
        {
            get
            {
                var tab   = _table;
                var hash  = key;
                var index = (hash & 0x7FFFFFFF) % tab.Length;
                for (var e = tab[index]; e != null; e = e.Next)
                {
                    if (e.Hash == hash && e.key == key)
                    {
                        return(e.value);
                    }
                }
                return(0);
            }

            set
            {
                var tab   = _table;
                var hash  = key;
                var index = (hash & 0x7FFFFFFF) % tab.Length;
                for (var e = tab[index]; e != null; e = e.Next)
                {
                    if (e.Hash == hash && e.key == key)
                    {
                        e.value = value;
                        return;
                    }
                }

                if (Size >= _threshold)
                {
                    Rehash();
                    this[key] = value;
                    return;
                }

                var en = new IntHashtableEntry
                {
                    Hash  = hash,
                    key   = key,
                    value = value,
                    Next  = tab[index]
                };
                tab[index] = en;
                ++Size;
            }
        }
コード例 #9
0
        /// Returns true if the collection contains an element for the key.
        // @param key the key that we are looking for
        // @see IntHashtable#contains
        virtual public bool ContainsKey(int key)
        {
            IntHashtableEntry[] tab = table;
            int hash  = key;
            int index = (hash & 0x7FFFFFFF) % tab.Length;

            for (IntHashtableEntry e = tab[index]; e != null; e = e.next)
            {
                if (e.hash == hash && e.key == key)
                {
                    return(true);
                }
            }
            return(false);
        }
コード例 #10
0
 /// Returns true if the specified object is an element of the hashtable.
 // This operation is more expensive than the ContainsKey() method.
 // @param value the value that we are looking for
 // @exception NullPointerException If the value being searched
 // for is equal to null.
 // @see IntHashtable#containsKey
 virtual public bool Contains(int value)
 {
     IntHashtableEntry[] tab = table;
     for (int i = tab.Length; i-- > 0;)
     {
         for (IntHashtableEntry e = tab[i]; e != null; e = e.next)
         {
             if (e.value == value)
             {
                 return(true);
             }
         }
     }
     return(false);
 }
コード例 #11
0
 public bool HasNext()
 {
     if (_entry != null)
     {
         return(true);
     }
     while (_index-- > 0)
     {
         if ((_entry = _table[_index]) != null)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #12
0
 virtual public bool HasNext()
 {
     if (entry != null)
     {
         return(true);
     }
     while (index-- > 0)
     {
         if ((entry = table[index]) != null)
         {
             return(true);
         }
     }
     return(false);
 }
コード例 #13
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public int this[int key]
        {
            get
            {
                IntHashtableEntry[] tab = _table;
                int hash  = key;
                int index = (hash & 0x7FFFFFFF) % tab.Length;
                for (IntHashtableEntry e = tab[index]; e != null; e = e.Next)
                {
                    if (e.Hash == hash && e.key == key)
                    {
                        return(e.value);
                    }
                }
                return(0);
            }

            set
            {
                IntHashtableEntry[] tab = _table;
                int hash  = key;
                int index = (hash & 0x7FFFFFFF) % tab.Length;
                for (IntHashtableEntry e = tab[index]; e != null; e = e.Next)
                {
                    if (e.Hash == hash && e.key == key)
                    {
                        e.value = value;
                        return;
                    }
                }

                if (_count >= _threshold)
                {
                    Rehash();
                    this[key] = value;
                    return;
                }

                IntHashtableEntry en = new IntHashtableEntry();
                en.Hash    = hash;
                en.key     = key;
                en.value   = value;
                en.Next    = tab[index];
                tab[index] = en;
                ++_count;
            }
        }
コード例 #14
0
        /// Gets the object associated with the specified key in the
        // hashtable.
        // @param key the specified key
        // @returns the element for the key or null if the key
        //      is not defined in the hash table.
        // @see IntHashtable#put
        public int this[int key] {
            get {
                IntHashtableEntry[] tab = table;
                int hash  = key;
                int index = (hash & 0x7FFFFFFF) % tab.Length;
                for (IntHashtableEntry e = tab[index]; e != null; e = e.next)
                {
                    if (e.hash == hash && e.key == key)
                    {
                        return(e.value);
                    }
                }
                return(0);
            }

            set {
                // Makes sure the key is not already in the hashtable.
                IntHashtableEntry[] tab = table;
                int hash  = key;
                int index = (hash & 0x7FFFFFFF) % tab.Length;
                for (IntHashtableEntry e = tab[index]; e != null; e = e.next)
                {
                    if (e.hash == hash && e.key == key)
                    {
                        e.value = value;
                        return;
                    }
                }

                if (count >= threshold)
                {
                    // Rehash the table if the threshold is exceeded.
                    Rehash();
                    this[key] = value;
                    return;
                }

                // Creates the new entry.
                IntHashtableEntry en = new IntHashtableEntry();
                en.hash    = hash;
                en.key     = key;
                en.value   = value;
                en.next    = tab[index];
                tab[index] = en;
                ++count;
            }
        }
コード例 #15
0
 virtual public IntHashtableEntry Next()
 {
     if (entry == null)
     {
         while ((index-- > 0) && ((entry = table[index]) == null))
         {
             ;
         }
     }
     if (entry != null)
     {
         IntHashtableEntry e = entry;
         entry = e.next;
         return(e);
     }
     throw new InvalidOperationException(MessageLocalization.GetComposedMessage("inthashtableiterator"));
 }
コード例 #16
0
 public IntHashtableEntry Next()
 {
     if (_entry == null)
     {
         while ((_index-- > 0) && ((_entry = _table[_index]) == null))
         {
             ;
         }
     }
     if (_entry != null)
     {
         var e = _entry;
         _entry = e.Next;
         return(e);
     }
     throw new InvalidOperationException("IntHashtableIterator");
 }
コード例 #17
0
 public IntHashtableEntry Next()
 {
     if (entry == null)
     {
         while ((index-- > 0) && ((entry = table[index]) == null))
         {
             ;
         }
     }
     if (entry != null)
     {
         IntHashtableEntry e = entry;
         entry = e.next;
         return(e);
     }
     throw new InvalidOperationException("IntHashtableIterator");
 }
コード例 #18
0
        /// Rehashes the content of the table into a bigger table.
        /// <summary>
        /// This method is called automatically when the hashtable's
        /// </summary>
        /// <summary>
        /// size exceeds the threshold.
        /// </summary>
        protected void Rehash()
        {
            var oldCapacity = _table.Length;
            var oldTable    = _table;

            var newCapacity = oldCapacity * 2 + 1;
            var newTable    = new IntHashtableEntry[newCapacity];

            _threshold = (int)(newCapacity * _loadFactor);
            _table     = newTable;

            for (var i = oldCapacity; i-- > 0;)
            {
                for (var old = oldTable[i]; old != null;)
                {
                    var e = old;
                    old = old.Next;

                    var index = (e.Hash & 0x7FFFFFFF) % newCapacity;
                    e.Next          = newTable[index];
                    newTable[index] = e;
                }
            }
        }
コード例 #19
0
        /// Removes the element corresponding to the key. Does nothing if the
        // key is not present.
        // @param key the key that needs to be removed
        // @return the value of key, or null if the key was not found.
        virtual public int Remove(int key)
        {
            IntHashtableEntry[] tab = table;
            int hash  = key;
            int index = (hash & 0x7FFFFFFF) % tab.Length;

            for (IntHashtableEntry e = tab[index], prev = null; e != null; prev = e, e = e.next)
            {
                if (e.hash == hash && e.key == key)
                {
                    if (prev != null)
                    {
                        prev.next = e.next;
                    }
                    else
                    {
                        tab[index] = e.next;
                    }
                    --count;
                    return(e.value);
                }
            }
            return(0);
        }
コード例 #20
0
ファイル: IntHashtable.cs プロジェクト: jagruti23/itextsharp
 virtual public IntHashtableEntry Next() {
     if (entry == null) {
         while ((index-- > 0) && ((entry = table[index]) == null));
     }
     if (entry != null) {
         IntHashtableEntry e = entry;
         entry = e.next;
         return e;
     }
     throw new InvalidOperationException(MessageLocalization.GetComposedMessage("inthashtableiterator"));
 }
コード例 #21
0
ファイル: IntHashtable.cs プロジェクト: jagruti23/itextsharp
 virtual public bool HasNext() {
     if (entry != null) {
         return true;
     }
     while (index-- > 0) {
         if ((entry = table[index]) != null) {
             return true;
         }
     }
     return false;
 }
コード例 #22
0
ファイル: IntHashtable.cs プロジェクト: jagruti23/itextsharp
 internal IntHashtableIterator(IntHashtableEntry[] table) {
     this.table = table;
     this.index = table.Length;
 }
コード例 #23
0
ファイル: IntHashtable.cs プロジェクト: jagruti23/itextsharp
 virtual protected internal IntHashtableEntry Clone() {
     IntHashtableEntry entry = new IntHashtableEntry();
     entry.hash = hash;
     entry.key = key;
     entry.value = value;
     entry.next = (next != null) ? next.Clone() : null;
     return entry;
 }
コード例 #24
0
ファイル: IntHashtable.cs プロジェクト: jagruti23/itextsharp
 /// Rehashes the content of the table into a bigger table.
 // This method is called automatically when the hashtable's
 // size exceeds the threshold.
 virtual protected void Rehash() {
     int oldCapacity = table.Length;
     IntHashtableEntry[] oldTable = table;
 
     int newCapacity = oldCapacity * 2 + 1;
     IntHashtableEntry[] newTable = new IntHashtableEntry[newCapacity];
 
     threshold = (int) ( newCapacity * loadFactor );
     table = newTable;
 
     for ( int i = oldCapacity ; i-- > 0 ; ) {
         for ( IntHashtableEntry old = oldTable[i] ; old != null ; ) {
             IntHashtableEntry e = old;
             old = old.next;
         
             int index = ( e.hash & 0x7FFFFFFF ) % newCapacity;
             e.next = newTable[index];
             newTable[index] = e;
         }
     }
 }
コード例 #25
0
ファイル: IntHashtable.cs プロジェクト: jagruti23/itextsharp
        /// Gets the object associated with the specified key in the
        // hashtable.
        // @param key the specified key
        // @returns the element for the key or null if the key
        //      is not defined in the hash table.
        // @see IntHashtable#put
        public int this[int key] {
            get {
                IntHashtableEntry[] tab = table;
                int hash = key;
                int index = ( hash & 0x7FFFFFFF ) % tab.Length;
                for ( IntHashtableEntry e = tab[index] ; e != null ; e = e.next ) {
                    if ( e.hash == hash && e.key == key )
                        return e.value;
                }
                return 0;
            }

            set {
                // Makes sure the key is not already in the hashtable.
                IntHashtableEntry[] tab = table;
                int hash = key;
                int index = ( hash & 0x7FFFFFFF ) % tab.Length;
                for ( IntHashtableEntry e = tab[index] ; e != null ; e = e.next ) {
                    if ( e.hash == hash && e.key == key ) {
                        e.value = value;
                        return;
                    }
                }
        
                if ( count >= threshold ) {
                    // Rehash the table if the threshold is exceeded.
                    Rehash();
                    this[key] = value;
                    return;
                }
        
                // Creates the new entry.
                IntHashtableEntry en = new IntHashtableEntry();
                en.hash = hash;
                en.key = key;
                en.value = value;
                en.next = tab[index];
                tab[index] = en;
                ++count;
            }
        }
コード例 #26
0
ファイル: IntHashtable.cs プロジェクト: pixelia-es/RazorPDF2
 public IntHashtableEntry Next()
 {
     if (entry == null) {
         while ((index-- > 0) && ((entry = table[index]) == null));
     }
     if (entry != null) {
         IntHashtableEntry e = entry;
         entry = e.next;
         return e;
     }
     throw new InvalidOperationException("IntHashtableIterator");
 }