void IOrderingInternal<TSourceItem>.RemoveThenOrdering(IThenOrderingInternal<TSourceItem> thenOrdering) { _thenOrderingsCount--; _thenOrderings.Remove(thenOrdering); }
private void processSourceItemChange(int sourceIndex, TSourceItem sourceItem) { void notifyThenOrderings(int newOrderedIndex) { int processedThenOrderingsCount = 0; for (int thenOrderingIndex = 0; thenOrderingIndex < _thenOrderingsCount; thenOrderingIndex++) { IThenOrderingInternal<TSourceItem> thenOrdering = _thenOrderings[thenOrderingIndex]; thenOrdering.ProcessSourceItemChange(newOrderedIndex, sourceItem); processedThenOrderingsCount++; if (processedThenOrderingsCount == _thenOrderingsCount) break; } } OrderingItemInfo<TOrderingValue> itemInfo = _itemInfos[sourceIndex]; OrderedItemInfo<TOrderingValue> orderedItemInfo = itemInfo.OrderedItemInfo; int orderedIndex = orderedItemInfo.Index; TOrderingValue orderingValue = getOrderingValue(itemInfo, sourceItem); if (_comparer.Compare(_orderingValues[orderedIndex], orderingValue) != 0) { int newOrderedIndex = getOrderedIndex(orderingValue); if (newOrderedIndex == Count) newOrderedIndex = newOrderedIndex - 1; else if (newOrderedIndex > orderedIndex) newOrderedIndex--; _orderingValues.RemoveAt(orderedIndex); _orderingValues.Insert(newOrderedIndex, orderingValue); _orderedPositions.Move(orderedIndex, newOrderedIndex); if (_thenOrderingsCount > 0) { RangePosition rangePosition = orderedItemInfo.RangePosition; if (rangePosition.Length == 1) _equalOrderingValueRangePositions.Remove(rangePosition.Index); else _equalOrderingValueRangePositions.ModifyLength(rangePosition.Index, -1); adjustEqualOrderingValueRangePosition( orderingValue, orderedItemInfo, newOrderedIndex, orderedIndex < newOrderedIndex ? newOrderedIndex : newOrderedIndex - 1, orderedIndex > newOrderedIndex ? newOrderedIndex : newOrderedIndex + 1); } if (orderedIndex != newOrderedIndex) { baseMoveItem(orderedIndex, newOrderedIndex); } else if (_thenOrderingsCount > 0) { notifyThenOrderings(newOrderedIndex); } } else if (_thenOrderingsCount > 0) { notifyThenOrderings(orderedIndex); } }