// Token: 0x06006F10 RID: 28432 RVA: 0x0017E114 File Offset: 0x0017C314
            internal void Insert(K key, V value)
            {
                int num = CerHashtable <K, V> .GetHashCodeHelper(key);

                if (num < 0)
                {
                    num = ~num;
                }
                K[] keys = this.m_keys;
                int num2 = num % keys.Length;

                for (;;)
                {
                    K k = keys[num2];
                    if (k == null)
                    {
                        break;
                    }
                    num2++;
                    if (num2 >= keys.Length)
                    {
                        num2 -= keys.Length;
                    }
                }
                this.m_count++;
                this.m_values[num2] = value;
                Volatile.Write <K>(ref keys[num2], key);
            }
예제 #2
0
        internal V this[K key]
        {
            get
            {
                CerHashtable <K, V> .Table table = Volatile.Read <CerHashtable <K, V> .Table>(ref this.m_Table);
                if (table == null)
                {
                    return(default(V));
                }
                int num = CerHashtable <K, V> .GetHashCodeHelper(key);

                if (num < 0)
                {
                    num = ~num;
                }
                K[] kArray = table.m_keys;
                int index  = num % kArray.Length;
                while (true)
                {
                    do
                    {
                        K k = Volatile.Read <K>(ref kArray[index]);
                        if ((object)k != null)
                        {
                            if (k.Equals((object)key))
                            {
                                return(table.m_values[index]);
                            }
                            ++index;
                        }
                        else
                        {
                            goto label_10;
                        }
                    }while (index < kArray.Length);
                    index -= kArray.Length;
                }
label_10:
                return(default(V));
            }
            set
            {
                CerHashtable <K, V> .Table table = this.m_Table;
                if (table != null)
                {
                    int newSize = 2 * (table.m_count + 1);
                    if (newSize >= table.m_keys.Length)
                    {
                        this.Rehash(newSize);
                    }
                }
                else
                {
                    this.Rehash(7);
                }
                this.m_Table.Insert(key, value);
            }
        }
        // Token: 0x170009D1 RID: 2513
        internal V this[K key]
        {
            get
            {
                CerHashtable <K, V> .Table table = Volatile.Read <CerHashtable <K, V> .Table>(ref this.m_Table);
                if (table == null)
                {
                    return(default(V));
                }
                int num = CerHashtable <K, V> .GetHashCodeHelper(key);

                if (num < 0)
                {
                    num = ~num;
                }
                K[] keys = table.m_keys;
                int num2 = num % keys.Length;
                for (;;)
                {
                    K k = Volatile.Read <K>(ref keys[num2]);
                    if (k == null)
                    {
                        goto IL_7F;
                    }
                    if (k.Equals(key))
                    {
                        break;
                    }
                    num2++;
                    if (num2 >= keys.Length)
                    {
                        num2 -= keys.Length;
                    }
                }
                return(table.m_values[num2]);

IL_7F:
                return(default(V));
            }
            set
            {
                CerHashtable <K, V> .Table table = this.m_Table;
                if (table != null)
                {
                    int num = 2 * (table.m_count + 1);
                    if (num >= table.m_keys.Length)
                    {
                        this.Rehash(num);
                    }
                }
                else
                {
                    this.Rehash(7);
                }
                this.m_Table.Insert(key, value);
            }
        }
예제 #4
0
            internal void Insert(K key, V value)
            {
                int num = CerHashtable <K, V> .GetHashCodeHelper(key);

                if (num < 0)
                {
                    num = ~num;
                }
                K[] kArray = this.m_keys;
                int index  = num % kArray.Length;

                while ((object)kArray[index] != null)
                {
                    ++index;
                    if (index >= kArray.Length)
                    {
                        index -= kArray.Length;
                    }
                }
                this.m_count         = this.m_count + 1;
                this.m_values[index] = value;
                Volatile.Write <K>(ref kArray[index], key);
            }