Exemple #1
0
        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");
                    }
                }
            }
        }
Exemple #2
0
        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");
                }
            }
        }