private IEnumerable <AggregationResult> Add(TKey key, TElement element) { if (Equals(key, _defaultKey)) { if (_defaultGroup == null) { _defaultGroup = new Grouping(key); _defaultGroup.Add(element); return(new[] { AggregationResult.Added(_defaultGroup) }); } _defaultGroup.Add(element); return(new[] { AggregationResult.Modified(_defaultGroup) }); } Grouping group; if (!_groups.TryGetValue(key, out group)) { group = new Grouping(key); _groups[key] = group; group.Add(element); return(new[] { AggregationResult.Added(group) }); } group.Add(element); return(new[] { AggregationResult.Modified(group) }); }
public IEnumerable <AggregationResult> Modify(AggregationContext context, ITuple tuple, IEnumerable <IFact> facts) { var results = new List <AggregationResult>(); foreach (var fact in facts) { var collection = (IEnumerable <TElement>)fact.Value; foreach (var value in collection) { if (_firstElements.TryGetValue(fact, out var oldFirst)) { if (Equals(oldFirst, value)) { results.Add(AggregationResult.Modified(value, value, Enumerable.Repeat(fact, 1))); } else { results.Add(AggregationResult.Removed(oldFirst)); results.Add(AggregationResult.Added(value, Enumerable.Repeat(fact, 1))); } } else { results.Add(AggregationResult.Added(value, Enumerable.Repeat(fact, 1))); } _firstElements[fact] = value; break; } } return(results); }
public IEnumerable <AggregationResult> Add(object fact) { var source = (TSource)fact; var value = _selector(source); _sourceToValue[source] = value; return(new[] { AggregationResult.Added(value) }); }
public IEnumerable <AggregationResult> Add(object fact) { var source = (TSource)fact; var value = _selector(source); var list = value.ToList(); _sourceToList[source] = list; return(list.Select(x => AggregationResult.Added(x)).ToArray()); }
public IEnumerable <AggregationResult> Add(ITuple tuple, IEnumerable <IFact> facts) { AddFacts(facts); if (!_created) { _created = true; return(new[] { AggregationResult.Added(_items) }); } return(new[] { AggregationResult.Modified(_items) }); }
public IEnumerable <AggregationResult> Modify(object fact) { var source = (TSource)fact; var value = _selector(source); var list = value.ToList(); var oldList = _sourceToList[source]; _sourceToList[source] = list; return(oldList.Select(x => AggregationResult.Removed(x)).Concat( list.Select(x => AggregationResult.Added(x))).ToArray()); }
public IEnumerable <AggregationResult> Add(ITuple tuple, IEnumerable <IFact> facts) { var results = new List <AggregationResult>(); foreach (var fact in facts) { var value = _selector.Invoke(tuple, fact); _sourceToValue[fact] = value; results.Add(AggregationResult.Added(value)); } return(results); }
public IEnumerable <AggregationResult> Add(IEnumerable <object> facts) { var results = new List <AggregationResult>(); foreach (var fact in facts) { var source = (TSource)fact; var value = _selector(source); _sourceToValue[source] = value; results.Add(AggregationResult.Added(value)); } return(results); }
private AggregationResult Add(TKey key, TElement element) { Grouping group; if (!_groups.TryGetValue(key, out group)) { group = new Grouping(key); _groups[key] = group; group.Add(element); return(AggregationResult.Added(group)); } group.Add(element); return(AggregationResult.Modified(group)); }
public IEnumerable <AggregationResult> Add(AggregationContext context, ITuple tuple, IEnumerable <IFact> facts) { var results = new List <AggregationResult>(); foreach (var fact in facts) { var collection = (IEnumerable <TElement>)fact.Value; foreach (var value in collection) { _firstElements[fact] = value; results.Add(AggregationResult.Added(value, Enumerable.Repeat(fact, 1))); break; } } return(results); }
public IEnumerable <AggregationResult> Modify(object fact) { var source = (TSource)fact; var value = _selector(source); var oldValue = _sourceToValue[source]; _sourceToValue[source] = value; if (Equals(oldValue, value)) { return new[] { AggregationResult.Modified(value) } } ; return(new[] { AggregationResult.Removed(oldValue), AggregationResult.Added(value) }); }
public IEnumerable <AggregationResult> Add(IEnumerable <object> facts) { var results = new List <AggregationResult>(); foreach (var fact in facts) { var source = (TSource)fact; var value = _selector(source); var list = new List <TResult>(value); _sourceToList[source] = list; foreach (var item in list) { results.Add(AggregationResult.Added(item)); } } return(results); }
public IEnumerable <AggregationResult> Modify(ITuple tuple, IEnumerable <IFact> facts) { var results = new List <AggregationResult>(); foreach (var fact in facts) { var source = (TSource)fact.Value; var value = _selector.Invoke(tuple, fact); var oldValue = (TResult)_sourceToValue[source]; _sourceToValue[source] = value; if (Equals(oldValue, value)) { results.Add(AggregationResult.Modified(value)); } else { results.Add(AggregationResult.Removed(oldValue)); results.Add(AggregationResult.Added(value)); } } return(results); }
public IEnumerable <AggregationResult> Initial() { return(new[] { AggregationResult.Added(_items) }); }