예제 #1
0
        protected System.Collections.Generic.IEnumerator <T> EnumeratorImplemenation()
        {
            LinkedNode <T> Current = Head;

            while (false.Equals(object.ReferenceEquals(Current, LinkedNode <T> .Null)))
            {
                yield return(Current.Value);

                Current = Current.Next;
            }
        }
예제 #2
0
        public static LinkedNode <T> InsertBefore(LinkedNode <T> node, ref T value)
        {
            LinkedNode <T> result = new LinkedNode <T>(ref value);

            result.Next = node;

            result.Previous = node.Previous;

            node.Previous.Next = result;

            node.Previous = result;

            return(result);
        }
예제 #3
0
        protected LinkedNode <T> AddLast(ref T value)
        {
            if (object.ReferenceEquals(Head, LinkedNode <T> .Null))
            {
                Tail = new LinkedNode <T>(ref value);
            }
            else
            {
                Tail = LinkedNode <T> .InsertBefore(Head, ref value);
            }

            System.Threading.Interlocked.Increment(ref m_Count);

            return(Tail);
        }
예제 #4
0
        public bool TryAddLast(ref T data)
        {
            long count = Count;

            if (count >= Capacity)
            {
                return(false);
            }
            else if (count.Equals(Binary.LongZero))
            {
                Tail = new LinkedNode <T>(ref data);
            }
            else
            {
                Tail.Next = (Tail = new LinkedNode <T>(ref data)
                {
                    Next = Tail
                });
            }

            System.Threading.Interlocked.Increment(ref m_Count);

            return(true);
        }