예제 #1
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        //////////////////////////////////////////////////////////////////

        bool RemoveQItem(QListItem <T> foundItem)
        {
            itemQItemDict.Remove(foundItem.Item);

            var prev = foundItem.Prev;
            var next = foundItem.Next;

            if (prev != null)
            {
                prev.Next = next;
            }

            if (next != null)
            {
                next.Prev = prev;
            }

            if (this.qFirst == foundItem)
            {
                this.qFirst = next;
            }

            if (this.qLast == foundItem)
            {
                this.qLast = prev;
            }

            foundItem.Clear();

            return(true);
        }
예제 #2
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        public bool Add(T Item)
        {
            if (itemQItemDict.ContainsKey(Item))
            {
                return(false);
            }

            if (qFirst == null)
            {
                qLast = qFirst = new QListItem <T>()
                {
                    Item = Item,
                    Next = null,
                    Prev = null
                };
                itemQItemDict[Item] = qLast;
            }
            else
            {
                var newLast = new QListItem <T>()
                {
                    Item = Item,
                    Prev = qLast,
                    Next = null
                };

                qLast.Next          = newLast;
                qLast               = newLast;
                itemQItemDict[Item] = qLast;
            }

            return(true);
        }
예제 #3
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        //////////////////////////////////////////////////////////////////

        public bool Contains(T Item)
        {
            QListItem <T> qItem = null;

            if (!itemQItemDict.TryGetValue(Item, out qItem))
            {
                return(false);
            }
            return(true);
        }
예제 #4
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        public bool Remove(T Item)
        {
            QListItem <T> qItem = null;

            if (!itemQItemDict.TryGetValue(Item, out qItem))
            {
                return(false);
            }

            return(RemoveQItem(qItem));
        }
예제 #5
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        public void Insert(int index, T item)
        {
            if (itemQItemDict.ContainsKey(item))
            {
                return;
            }

            if (index == Count)
            {
                Add(item);
                return;
            }

            if (index == 0)
            {
                QListItem <T> qNew = new QListItem <T>()
                {
                    Item = item,
                    Prev = null,
                    Next = qFirst
                };
                itemQItemDict[item] = qNew;
                qFirst.Prev         = qNew;
                qFirst = qNew;
                return;
            }

            Int32         i     = -1;
            QListItem <T> qitem = qFirst;

            while (qitem != null)
            {
                i++;
                if (i == index)
                {
                    QListItem <T> qNew = new QListItem <T>()
                    {
                        Item = item,
                        Prev = qitem,
                        Next = qitem.Next
                    };
                    qitem.Next.Prev     = qNew;
                    qitem.Next          = qNew;
                    itemQItemDict[item] = qNew;

                    return;
                }
                qitem = qitem.Next;
            }
        }
예제 #6
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        public bool Replace(T OldItem, T NewItem)
        {
            QListItem <T> foundItem = null;

            if (!itemQItemDict.TryGetValue(OldItem, out foundItem))
            {
                return(false);
            }

            itemQItemDict.Remove(OldItem);
            itemQItemDict.Add(NewItem, foundItem);
            foundItem.Item = NewItem;
            return(true);
        }
예제 #7
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        public void Clear()
        {
            this.itemQItemDict.Clear();

            QListItem <T> qItem = qFirst;

            while (qItem != null)
            {
                qItem.Clear();
                qItem = qItem.Next;
            }

            this.qFirst = null;
            this.qLast  = null;
        }
예제 #8
0
파일: QList.cs 프로젝트: b-y-t-e/QList
 public T this[int index]
 {
     get
     {
         QListItem <T> qItem = GetByIndex(index);
         return(qItem.Item);
     }
     set
     {
         QListItem <T> qItem = GetByIndex(index);
         itemQItemDict.Remove(qItem.Item);
         itemQItemDict.Add(value, qItem);
         qItem.Item = value;
     }
 }
예제 #9
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        public void RemoveAt(int index)
        {
            Int32         i     = -1;
            QListItem <T> qitem = qFirst;

            while (qitem != null)
            {
                i++;
                if (i == index)
                {
                    RemoveQItem(qitem);
                    return;
                }
                qitem = qitem.Next;
            }
        }
예제 #10
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        public int IndexOf(T item)
        {
            Int32         i     = -1;
            QListItem <T> qitem = qFirst;

            while (qitem != null)
            {
                i++;
                if (item.Equals(qitem.Item))
                {
                    return(i);
                }
                qitem = qitem.Next;
            }
            return(-1);
        }
예제 #11
0
파일: QList.cs 프로젝트: b-y-t-e/QList
        QListItem <T> GetByIndex(Int32 Index)
        {
            if (Index >= Count || Index < 0)
            {
                return(null);
            }

            if (Index < Count / 2)
            {
                Int32         i     = -1;
                QListItem <T> qItem = qFirst;
                while (qItem != null)
                {
                    i++;
                    if (i == Index)
                    {
                        return(qItem);
                    }
                    qItem = qItem.Next;
                }
            }
            else
            {
                Int32         i     = Count;
                QListItem <T> qItem = qLast;
                while (qItem != null)
                {
                    i--;
                    if (i == Index)
                    {
                        return(qItem);
                    }
                    qItem = qItem.Prev;
                }
            }
            return(null);
        }
예제 #12
0
파일: QList.cs 프로젝트: b-y-t-e/QList
 internal void Clear()
 {
     Item = default(T);
     Next = null;
     Prev = null;
 }