Esempio n. 1
0
 public static WeakNode GetAlive(WeakNode node)
 {
     while (node != null && !node.m_reference.IsAlive)
     {
         node = node.Next;
     }
     return(node);
 }
Esempio n. 2
0
        public void Add(TKey key, TValue value)
        {
            WeakNode node = new WeakNode(null, this);

            table.Add(key, node);
            node.node = list.AddLast(new KeyValue {
                Key = new WeakReference <TKey>(key), Value = value
            });
        }
Esempio n. 3
0
        /// <summary>
        /// Adds an item to the begining (head) of the collection.
        /// </summary>
        /// <remarks>Potentially a lot faster than <see cref="Add"/>.</remarks>
        public void Insert(T item)
        {
            Contract.Requires <ArgumentNullException>(item != null);

            var node = new WeakNode(item);

            node.Next = m_head;
            m_head    = node;
        }
Esempio n. 4
0
        private IEnumerator <WeakNode> GetNodeEnumerator()
        {
            var current = m_head = WeakNode.GetAlive(m_head);

            while (current != null)
            {
                yield return(current);

                current = current.Next = WeakNode.GetAlive(current.Next);
            }
        }
Esempio n. 5
0
        public void Add(T item)
        {
            Contract.Requires <ArgumentNullException>(item != null);

            var node = new WeakNode(item);

            var last = FuncEnumerable <WeakNode> .Get(GetNodeEnumerator).LastOrDefault();

            if (last == null)
            {
                m_head = node;
            }
            else
            {
                last.Next = node;
            }
        }
Esempio n. 6
0
 public TValue this[TKey key]
 {
     get
     {
         clean();
         WeakNode node;
         if (!table.TryGetValue(key, out node))
         {
             throw new KeyNotFoundException();
         }
         return(node.node.Value.Value);
     }
     set
     {
         clean();
         WeakNode node = table.GetValue(key, create);
         KeyValue kv   = node.node.Value;
         kv.Value        = value;
         node.node.Value = kv;
     }
 }
Esempio n. 7
0
 public WeakNode(T value, WeakNode next = null)
 {
     Contract.Requires(value != null);
     m_reference = new WeakReference(value);
     Next        = next;
 }