コード例 #1
0
        /// <summary>
        /// Will use InsertAdapter and Comparer and IFilter if they are set
        /// </summary>
        /// <param name="item"></param>
        /// <returns></returns>
        public int InsertSorted(T item)
        {
            lock (_lock)
            {
                //if using an insert adapter, generate the new item
                if (InsertAdapter != null)
                {
                    item = InsertAdapter.CreateItem(item);
                }

                //if it's not comparable, then just add it natural order
                if (!(item is IComparable) && Comparer == null)
                {
                    InsertItem(Count, item);
                    return(Count - 1);
                }

                if (Count == 0)
                {
                    InsertItem(Count, item);
                    return(0);
                }

                int left   = 0;
                int right  = Count - 1;
                int middle = right / 2;

                while (left < right)
                {
                    int compare = compareItems(item, this[middle]);

                    if (compare > 0) //this item is later
                    {
                        left   = middle + 1;
                        middle = (right + left) / 2;
                    }

                    else if (compare < 0) //this item is sooner
                    {
                        right  = middle - 1;
                        middle = (right + left) / 2;
                    }

                    else //equal
                    {
                        left  = middle + 1;
                        right = left;
                        break;
                    }
                }

                while (left < Count && compareItems(item, this[left]) >= 0)
                {
                    left++;
                }

                InsertItem(left, item);
                return(left);
            }
        }
コード例 #2
0
 internal MyObservableSublistSortSameAsParent(MyObservableList <T> parentList, IFilter <T> filter, InsertAdapter <T> insertAdapter)
     : base(parentList, SublistSortOption.SameAsParentList, filter, null, insertAdapter)
 {
 }
コード例 #3
0
        public MyObservableSublist(MyObservableList <T> parentList, SublistSortOption sortOption, IFilter <T> filter, IComparer <T> comparer, InsertAdapter <T> insertAdapter)
        {
            if (parentList == null)
            {
                throw new ArgumentNullException("parentList cannot be null");
            }

            base.Filter        = filter;
            base.Comparer      = comparer;
            base.InsertAdapter = insertAdapter;

            ParentList = parentList;
            SortOption = sortOption;

            Reset();

            parentList.CollectionChanged += parentList_CollectionChanged;
        }