public void MoveToHead(object key)
        {
            LinkedDictionaryEntry de = (LinkedDictionaryEntry)_indexedValues[key];

            if (de == null)
            {
                throw new ArgumentException("Key " + key + " not found");
            }
            // if the head is the element then there is nothing to do
            if (_head == de)
            {
                return;
            }
            de._previous._next = de._next;
            if (de._next != null)
            {
                de._next._previous = de._previous;
            }
            else
            {
                _tail = de._previous;
            }
            de._next     = _head;
            _head        = de;
            de._previous = null;
        }
        public object this[object key]
        {
            get
            {
                LinkedDictionaryEntry entry = (LinkedDictionaryEntry)_indexedValues[key];
                if (entry == null)
                {
                    return(null); // key not found
                }
                else
                {
                    return(entry._entry.Value);
                }
            }

            set
            {
                LinkedDictionaryEntry entry = (LinkedDictionaryEntry)_indexedValues[key];
                if (entry == null)
                {
                    Add(key, value);
                }
                else
                {
                    entry._entry.Value = value;
                }
            }
        }
        public void Add(object key, object value)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }

            if (Contains(key))
            {
                throw new ArgumentException("LinkedHashtable already contains key. key=" + key);
            }

            LinkedDictionaryEntry de = new LinkedDictionaryEntry(key, value);

            if (_head == null)
            {
                _head = de;
                _tail = de;
            }
            else
            {
                _tail._next  = de;
                de._previous = _tail;
                _tail        = de;
            }
            _indexedValues[key] = de;
        }
        public void Remove(object key)
        {
            if (key == null)
            {
                throw new ArgumentNullException("key");
            }

            LinkedDictionaryEntry de = (LinkedDictionaryEntry)_indexedValues[key];

            if (de == null)
            {
                return;             // key not found.
            }
            LinkedDictionaryEntry prev = de._previous;

            if (prev == null)
            {
                _head = de._next;
            }
            else
            {
                prev._next = de._next;
            }

            LinkedDictionaryEntry next = de._next;

            if (next == null)
            {
                _tail = de;
            }
            else
            {
                next._previous = de._previous;
            }
        }
 public bool MoveNext()
 {
     if (_needsReset)
     {
         return(false);
     }
     else if (_current == null)
     {
         _current = _container.Head;
     }
     else
     {
         _current = _current._next;
     }
     _needsReset = (_current == null);
     return(!_needsReset);
 }
 public void Reset()
 {
     _current    = null;
     _needsReset = false;
 }
Example #7
0
 public void MoveToHead(object key)
 {
     LinkedDictionaryEntry de = (LinkedDictionaryEntry)_indexedValues[key];
     if (de == null)
     {
         throw new ArgumentException("Key " + key + " not found");
     }
     // if the head is the element then there is nothing to do
     if (_head == de)
     {
         return;
     }
     de._previous._next = de._next;
     if (de._next != null)
     {
         de._next._previous = de._previous;
     }
     else
     {
         _tail = de._previous;
     }
     de._next = _head;
     _head = de;
     de._previous = null;
 }
Example #8
0
 public void Reset()
 {
     _current = null;
     _needsReset = false;
 }
Example #9
0
 public bool MoveNext()
 {
     if (_needsReset)
     {
         return false;
     }
     else if (_current == null)
     {
         _current = _container.Head;                    
     }
     else
     {
         _current = _current._next;
     }
     _needsReset = (_current == null);
     return !_needsReset;                
 }
Example #10
0
        public void Remove(object key)
        {
            if (key == null) throw new ArgumentNullException("key");
            
            LinkedDictionaryEntry de = (LinkedDictionaryEntry)_indexedValues[key];
            if (de == null) return; // key not found.
            LinkedDictionaryEntry prev = de._previous;
            if (prev == null)
            {
                _head = de._next;
            }
            else
            {
                prev._next = de._next;
            }

            LinkedDictionaryEntry next = de._next;
            if (next == null)
            {
                _tail = de;
            }
            else
            {
                next._previous = de._previous;
            }
        }
Example #11
0
 public void Add(object key, object value)
 {
     if (key == null) throw new ArgumentNullException("key");
     
     if (Contains(key))
     {
         throw new ArgumentException("LinkedHashtable already contains key. key=" + key);
     }
     
     LinkedDictionaryEntry de = new LinkedDictionaryEntry(key, value);
     if (_head == null)
     {
         _head = de;
         _tail = de;
     }
     else
     {
         _tail._next = de;
         de._previous = _tail;
         _tail = de;
     }
     _indexedValues[key] = de;
 }