private Filtering(Expression <Func <TSourceItem, bool> > predicateExpression, int sourceCapacity, int capacity) : base(capacity) { _initialCapacity = capacity; _filteredPositions = new Positions <Position>(new List <Position>(_initialCapacity)); _itemInfos = new List <ItemInfo>(sourceCapacity); _sourcePositions = new Positions <ItemInfo>(_itemInfos); _predicateExpressionOriginal = predicateExpression; CallToConstantConverter callToConstantConverter = new CallToConstantConverter(predicateExpression.Parameters); _predicateExpression = (Expression <Func <TSourceItem, bool> >)callToConstantConverter.Visit(predicateExpression); _predicateContainsParametrizedObservableComputationsCalls = callToConstantConverter.ContainsParametrizedObservableComputationCalls; if (!_predicateContainsParametrizedObservableComputationsCalls) { _predicateExpressionInfo = ExpressionWatcher.GetExpressionInfo(_predicateExpression); // ReSharper disable once PossibleNullReferenceException _predicateFunc = _predicateExpression.Compile(); } }
public Computing( Expression <Func <TResult> > getValueExpression) { _changeValueAction = () => setValue(getResult()); _getValueExpressionOriginal = getValueExpression; CallToConstantConverter callToConstantConverter = new CallToConstantConverter(_getValueExpressionOriginal.Parameters); Expression <Func <TResult> > getValueExpression1 = (Expression <Func <TResult> >)callToConstantConverter.Visit(_getValueExpressionOriginal); // ReSharper disable once PossibleNullReferenceException _getValueFunc = getValueExpression1.Compile(); _expressionInfo = ExpressionWatcher.GetExpressionInfo(getValueExpression1); }
internal static bool ProcessReplaceSourceItem <TExpression, TSourceItem>( FilteringItemInfo replacingItemInfo, TSourceItem sourceItem, object[] sourceItems, int sourceIndex, bool predicateContainsParametrizedObservableComputationsCalls, Expression <TExpression> predicateExpression, out int predicateExpressionCallCount, ExpressionWatcher.ExpressionInfo orderingValueSelectorExpressionInfo, List <FilteringItemInfo> filteringItemInfos, Positions <Position> filteredPositions, IFiltering <TSourceItem> thisAsFiltering, CollectionComputing <TSourceItem> current) { ExpressionWatcher oldExpressionWatcher = replacingItemInfo.ExpressionWatcher; Utils.disposeExpressionWatcher(oldExpressionWatcher, replacingItemInfo.NestedComputings, thisAsFiltering, predicateContainsParametrizedObservableComputationsCalls); Utils.getItemInfoContent( sourceItems, out ExpressionWatcher watcher, out Func <bool> predicateFunc, out List <IComputingInternal> nestedComputings1, predicateExpression, out predicateExpressionCallCount, thisAsFiltering, predicateContainsParametrizedObservableComputationsCalls, orderingValueSelectorExpressionInfo); replacingItemInfo.PredicateFunc = predicateFunc; watcher.ValueChanged = thisAsFiltering.expressionWatcher_OnValueChanged; watcher._position = oldExpressionWatcher._position; replacingItemInfo.ExpressionWatcher = watcher; replacingItemInfo.NestedComputings = nestedComputings1; bool replace = !ProcessChangeSourceItem(sourceIndex, sourceItem, filteringItemInfos, thisAsFiltering, filteredPositions, current) && replacingItemInfo.FilteredPosition != null; return(replace); }
private Selecting(Expression <Func <TSourceItem, TResultItem> > selectorExpression, int capacity) : base(capacity) { _itemInfos = new List <ItemInfo>(capacity); _sourcePositions = new Positions <ItemInfo>(_itemInfos); _selectorExpressionOriginal = selectorExpression; CallToConstantConverter callToConstantConverter = new CallToConstantConverter(_selectorExpressionOriginal.Parameters); _selectorExpression = (Expression <Func <TSourceItem, TResultItem> >)callToConstantConverter.Visit( _selectorExpressionOriginal); _selectorContainsParametrizedObservableComputationsCalls = callToConstantConverter.ContainsParametrizedObservableComputationCalls; if (!_selectorContainsParametrizedObservableComputationsCalls) { _selectorExpressionInfo = ExpressionWatcher.GetExpressionInfo(_selectorExpression); // ReSharper disable once PossibleNullReferenceException _selectorFunc = _selectorExpression.Compile(); } }