private void ProcessChange(AggregationChange change) { switch (change.Type) { case ChangeType.Add: ProcessAdd(change); break; case ChangeType.Remove: ProcessRemove(change); break; default: ProcessUpdate(change); break; } Interlocked.Decrement(ref _pendingCount); }
public void Post(AggregationChange change) { Interlocked.Increment(ref _pendingCount); if (change.Type == ChangeType.Add) { Count++; } else if (change.Type == ChangeType.Remove) { Count--; } _changeBlock.Post(change); }
private void ProcessUpdate(AggregationChange change) { Debug.Assert(change.Type == ChangeType.Update); if (HasGroupResults) { var key = change.Entity.GetKey(_keyIndex); var groupResult = _groupResults[key]; groupResult.Post(change); } foreach (var u in change.Updates) { _aggregators[u.Config.Index].Update(u.Values, change.Property, change.NewValue); } }
private void ProcessRemove(AggregationChange change) { Debug.Assert(change.Type == ChangeType.Remove); if (HasGroupResults) { var key = change.Entity.GetKey(_keyIndex); var groupResult = _groupResults[key]; groupResult.Post(change); if (groupResult.Count == 0) { _groupResults.Remove(key); groupResult.Dispose(); } } foreach (var u in change.Updates) { _aggregators[u.Config.Index].Remove(u.Values); } }
private void ProcessAdd(AggregationChange change) { Debug.Assert(change.Type == ChangeType.Add); if (HasGroupResults) { AggregationResult groupResult; var key = change.Entity.GetKey(_keyIndex); if (!_groupResults.TryGetValue(key, out groupResult)) { groupResult = new AggregationResult(_metadata, _config, _keyIndex + 1); _groupResults.Add(key, groupResult); } groupResult.Post(change); } foreach (var u in change.Updates) { _aggregators[u.Config.Index].Add(u.Values); } }
public void Post(AggregationChange change) { Interlocked.Increment(ref _pendingCount); if (change.Type == ChangeType.Add) Count++; else if (change.Type == ChangeType.Remove) Count--; _changeBlock.Post(change); }
protected override void UpdateEntity(Entity entity, ICollection <PropertyAggregatorUpdate> updates, PropertyMetadata property, decimal newValue) { _result.Post(AggregationChange.Update(entity, updates, property, newValue)); }
protected override void RemoveEntity(Entity entity, ICollection <PropertyAggregatorUpdate> updates) { _result.Post(AggregationChange.Remove(entity, updates)); }