internal void ValidateConsistency() { _sourcePositions.ValidateConsistency(); IList <TSourceItem> source = _sourceScalar.getValue(_source, new ObservableCollection <TSourceItem>()) as IList <TSourceItem>; // ReSharper disable once PossibleNullReferenceException if (_itemInfos.Count != source.Count) { throw new ObservableComputationsException(this, "Consistency violation: Selecting.1"); } Func <TSourceItem, TResultItem> selector = _selectorExpressionOriginal.Compile(); // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (source != null) { if (_itemInfos.Count != source.Count) { throw new ObservableComputationsException(this, "Consistency violation: Selecting.6"); } for (int sourceIndex = 0; sourceIndex < source.Count; sourceIndex++) { TSourceItem sourceItem = source[sourceIndex]; ItemInfo itemInfo = _itemInfos[sourceIndex]; if (!EqualityComparer <TResultItem> .Default.Equals(this[sourceIndex], selector(sourceItem))) { throw new ObservableComputationsException(this, "Consistency violation: Selecting.2"); } if (_itemInfos[sourceIndex].Index != sourceIndex) { throw new ObservableComputationsException(this, "Consistency violation: Selecting.3"); } if (itemInfo.ExpressionWatcher._position != _itemInfos[sourceIndex]) { throw new ObservableComputationsException(this, "Consistency violation: Selecting.4"); } if (!_itemInfos.Contains((ItemInfo)itemInfo.ExpressionWatcher._position)) { throw new ObservableComputationsException(this, "Consistency violation: Selecting.5"); } if (itemInfo.ExpressionWatcher._position.Index != sourceIndex) { throw new ObservableComputationsException(this, "Consistency violation: Selecting.7"); } } } }
internal void ValidateConsistency() { _filteredPositions.ValidateConsistency(); _sourcePositions.ValidateConsistency(); IList <TSourceItem> source = _sourceScalar.getValue(_source, new ObservableCollection <TSourceItem>()) as IList <TSourceItem>; // ReSharper disable once PossibleNullReferenceException if (_itemInfos.Count != source.Count) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.9"); } Func <TSourceItem, bool> predicate1 = _predicateExpression.Compile(); Func <TSourceItem, FilteringItemInfo, bool> predicate = (si, fii) => fii.PredicateFunc != null?fii.PredicateFunc() : predicate1(si); // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (source != null) { if (_itemInfos.Count != source.Count) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.14"); } if (_source != null && _filteredPositions.List.Count - 1 != Count) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.15"); } if (_source == null && _filteredPositions.List.Count != 0) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.16"); } int count = 0; int index = 0; for (int sourceIndex = 0; sourceIndex < source.Count; sourceIndex++) { TSourceItem sourceItem = source[sourceIndex]; FilteringItemInfo itemInfo = _itemInfos[sourceIndex]; if (predicate(sourceItem, itemInfo)) { if (itemInfo.FilteredPosition == null) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.2"); } if (!EqualityComparer <TSourceItem> .Default.Equals(this[index], sourceItem)) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.1"); } if (itemInfo.FilteredPosition.Index != index) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.5"); } count++; index++; } else { if (itemInfo.FilteredPosition != null) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.3"); } } if (_itemInfos[sourceIndex].Index != sourceIndex) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.7"); } if (itemInfo.ExpressionWatcher._position != _itemInfos[sourceIndex]) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.8"); } if (itemInfo.FilteredPosition != null && !_filteredPositions.List.Contains(itemInfo.FilteredPosition)) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.10"); } if (!_filteredPositions.List.Contains(itemInfo.NextFilteredItemPosition)) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.11"); } if (!_itemInfos.Contains(itemInfo.ExpressionWatcher._position)) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.12"); } } if (_source != null) { Position nextFilteredItemPosition = _filteredPositions.List[count]; for (int sourceIndex = source.Count - 1; sourceIndex >= 0; sourceIndex--) { TSourceItem sourceItem = source[sourceIndex]; FilteringItemInfo itemInfo = _itemInfos[sourceIndex]; if (itemInfo.NextFilteredItemPosition != nextFilteredItemPosition) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.4"); } if (predicate(sourceItem, itemInfo)) { nextFilteredItemPosition = itemInfo.FilteredPosition; } } if (_filteredPositions.List.Count != count + 1) { throw new ObservableComputationsException(this, "Consistency violation: Filtering.6"); } } } }
public void ValidateConsistency() { IList<TSourceItem> source = _sourceScalar.getValue(_source, new ObservableCollection<TSourceItem>()) as IList<TSourceItem>; if (_itemInfos.Count != Count) throw new ObservableComputationsException(this, "Consistency violation: Ordering.7"); List<TSourceItem> copy = this.ToList(); // ReSharper disable once PossibleNullReferenceException for (int sourceIndex = 0; sourceIndex < source.Count; sourceIndex++) { TSourceItem sourceItem = source[sourceIndex]; if (!copy.Remove(sourceItem)) throw new ObservableComputationsException(this, "Consistency violation: Ordering.1"); } _orderedPositions.ValidateConsistency(); Func<TSourceItem, TOrderingValue> orderingValueSelector = _orderingValueSelectorExpression.Compile(); IComparer<TOrderingValue> comparer = _comparerScalar.getValue(_comparer) ?? Comparer<TOrderingValue>.Default; ListSortDirection listSortDirection = _sortDirectionScalar.getValue(_sortDirection); if (_orderingValues.Count != Count) throw new ObservableComputationsException(this, "Consistency violation: Ordering.14"); if (_thenOrderingsCount > 0) { _equalOrderingValueRangePositions.ValidateConsistency(); } RangePosition rangePosition = null; int equalOrderingValueItemsCount = 0; int rangePositionIndex = 0; for (int orderedIndex = 0; orderedIndex < Count; orderedIndex++) { TSourceItem orderedItem = this[orderedIndex]; if (orderedIndex > 0) { int compareResult = comparer.Compare(orderingValueSelector(this[orderedIndex - 1]), orderingValueSelector(this[orderedIndex])); if ((compareResult < 0 && listSortDirection == ListSortDirection.Descending) || (compareResult > 0 && listSortDirection == ListSortDirection.Ascending)) throw new ObservableComputationsException(this, "Consistency violation: Ordering.3"); if (_thenOrderingsCount > 0) { if (compareResult == 0) { equalOrderingValueItemsCount++; if (rangePosition != _orderedItemInfos[orderedIndex].RangePosition) throw new ObservableComputationsException(this, "Consistency violation: Ordering.17"); } else { // ReSharper disable once PossibleNullReferenceException if (rangePosition.Length != equalOrderingValueItemsCount) throw new ObservableComputationsException(this, "Consistency violation: Ordering.20"); if (rangePosition.Index != rangePositionIndex) throw new ObservableComputationsException(this, "Consistency violation: Ordering.21"); rangePositionIndex++; equalOrderingValueItemsCount = 1; rangePosition = _orderedItemInfos[orderedIndex].RangePosition; } } } else { if (_thenOrderingsCount > 0) { rangePosition = _orderedItemInfos[orderedIndex].RangePosition; equalOrderingValueItemsCount = 1; } } OrderingItemInfo<TOrderingValue> itemInfo = _orderedItemInfos[orderedIndex].ItemInfo; if (itemInfo.OrderedItemInfo.Index != orderedIndex) throw new ObservableComputationsException(this, "Consistency violation: Ordering.13"); if (!EqualityComparer<TOrderingValue>.Default.Equals(_orderingValues[orderedIndex], orderingValueSelector(orderedItem))) throw new ObservableComputationsException(this, "Consistency violation: Ordering.10"); } if (_thenOrderingsCount > 0 && Count > 0) { // ReSharper disable once PossibleNullReferenceException if (rangePosition.Length != equalOrderingValueItemsCount) throw new ObservableComputationsException(this, "Consistency violation: Ordering.22"); if (rangePosition.Index != rangePositionIndex) throw new ObservableComputationsException(this, "Consistency violation: Ordering.23"); } _sourcePositions.ValidateConsistency(); if (_sourcePositions.List.Count != source.Count) throw new ObservableComputationsException(this, "Consistency violation: Ordering.15"); for (int sourceIndex = 0; sourceIndex < source.Count; sourceIndex++) { TSourceItem sourceItem = source[sourceIndex]; OrderingItemInfo<TOrderingValue> itemInfo = _itemInfos[sourceIndex]; if (itemInfo.ExpressionWatcher._position != _sourcePositions.List[sourceIndex]) throw new ObservableComputationsException(this, "Consistency violation: Ordering.8"); if (!EqualityComparer<TOrderingValue>.Default.Equals(_orderingValues[itemInfo.OrderedItemInfo.Index], orderingValueSelector(sourceItem))) throw new ObservableComputationsException(this, "Consistency violation: Ordering.9"); if (!_orderedItemInfos.Contains(_itemInfos[sourceIndex].OrderedItemInfo)) throw new ObservableComputationsException(this, "Consistency violation: Ordering.11"); if (!_sourcePositions.List.Contains(_itemInfos[sourceIndex].ExpressionWatcher._position)) throw new ObservableComputationsException(this, "Consistency violation: Ordering.12"); if (_itemInfos[sourceIndex].ExpressionWatcher._position.Index != sourceIndex) throw new ObservableComputationsException(this, "Consistency violation: Ordering.16"); } }
public void ValidateConsistency() { _sourcePositions.ValidateConsistency(); IList <TSourceItem> source = _sourceScalar.getValue(_source, new ObservableCollection <TSourceItem>()) as IList <TSourceItem>; // ReSharper disable once PossibleNullReferenceException int sourceCount = source.Count; if (_itemInfos.Count != sourceCount) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.1"); } Func <TSourceItem, bool> predicate = _predicateExpressionOriginal.Compile(); int predicatePassedCount = 0; // ReSharper disable once ConditionIsAlwaysTrueOrFalse if (source != null) { if (_sourcePositions.List.Count != sourceCount) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.9"); } // ReSharper disable once NotAccessedVariable int index = 0; for (int sourceIndex = 0; sourceIndex < sourceCount; sourceIndex++) { TSourceItem sourceItem = source[sourceIndex]; ItemInfo itemInfo = _itemInfos[sourceIndex]; if (predicate(sourceItem)) { predicatePassedCount++; index++; if (!itemInfo.PredicateResult) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.2"); } } else { if (itemInfo.PredicateResult) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.3"); } } if (_sourcePositions.List[sourceIndex].Index != sourceIndex) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.4"); } if (itemInfo.ExpressionWatcher._position != _sourcePositions.List[sourceIndex]) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.5"); } if (!_sourcePositions.List.Contains((ItemInfo)itemInfo.ExpressionWatcher._position)) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.6"); } if (itemInfo.ExpressionWatcher._position.Index != sourceIndex) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.10"); } } if (predicatePassedCount != _predicatePassedCount) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.7"); } if (_value != _predicatePassedCount > 0) { throw new ObservableComputationsException(this, "Consistency violation: AnyComputing.8"); } } }