Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
            }
        }
Exemplo n.º 4
0
        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);
            }
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
            }
        }
Exemplo n.º 7
0
        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);
            }
        }
Exemplo n.º 8
0
        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);
        }
Exemplo n.º 9
0
        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);
            }
        }
Exemplo n.º 10
0
        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);
        }
Exemplo n.º 11
0
 protected override void UpdateEntity(Entity entity, ICollection <PropertyAggregatorUpdate> updates, PropertyMetadata property, decimal newValue)
 {
     _result.Post(AggregationChange.Update(entity, updates, property, newValue));
 }
Exemplo n.º 12
0
 protected override void RemoveEntity(Entity entity, ICollection <PropertyAggregatorUpdate> updates)
 {
     _result.Post(AggregationChange.Remove(entity, updates));
 }