private AggregationChange(ChangeType type, Entity entity, ICollection<PropertyAggregatorUpdate> updates, PropertyMetadata property = null, decimal newValue = default(decimal))
 {
     Type = type;
     Entity = entity;
     Updates = updates;
     Property = property;
     NewValue = newValue;
 }
        private void EntityOnPropertyChanged(object sender, PropertyEventArgs args)
        {
            Debug.Assert(_changingProperty == args.Property);
            Debug.Assert(_updates != null);

            var entity = (Entity)sender;
            var newValue = entity.Get(_changingProperty);

            UpdateEntity(entity, _updates, _changingProperty, newValue);

            _changingProperty = null;
            _updates = null;
        }
        public AggregationConfigTest()
        {
            var metadata = new EntityMetadata(1, 3);

            _property0 = metadata.Properties[0];
            _property1 = metadata.Properties[1];
            _property2 = metadata.Properties[2];

            _aggregatorConfig0 = new WgtAvgPropertyAggregatorConfig(0, _property0, _property1);
            _aggregatorConfig1 = new WgtAvgPropertyAggregatorConfig(1, _property1, _property2);
            _aggregatorConfig2 = new WgtAvgPropertyAggregatorConfig(2, _property0, _property2);

            _config = new AggregationConfig(metadata, new[] { _aggregatorConfig0, _aggregatorConfig1, _aggregatorConfig2 });
        }
Example #4
0
        public void Set(PropertyMetadata property, decimal value)
        {
            var oldValue = _values[property.Index];
            if (oldValue == value) return;

            var propertyChanging = PropertyChanging;
            if (propertyChanging != null)
                propertyChanging(this, property.EventArgs);

            _values[property.Index] = value;

            var propertyChanged = PropertyChanged;
            if (propertyChanged != null)
                propertyChanged(this, property.EventArgs);
        }
        public void Update(ValueTuple oldValues, PropertyMetadata property, decimal newValue)
        {
            Debug.Assert(property == _valueProperty || property == _weightProperty);

            var oldValue = oldValues.Value0;
            var oldWeight = oldValues.Value1;

            if (property == _valueProperty) {
                _sum += (newValue - oldValue) * oldWeight;
            }
            else {
                _sum += oldValue * (newValue - oldWeight);
                _weightSum += newValue - oldWeight;
            }
        }
 public SumPropertyAggregator(PropertyMetadata property)
 {
     _property = property;
 }
Example #7
0
 public decimal Get(PropertyMetadata property)
 {
     return _values[property.Index];
 }
 protected override void UpdateEntity(Entity entity, ICollection<PropertyAggregatorUpdate> updates, PropertyMetadata property, decimal newValue)
 {
     _result.Update(entity, updates, property, newValue);
 }
 public SumPropertyAggregatorConfig(int index, PropertyMetadata property)
     : base(index, "Sum", property)
 {
 }
 public WgtAvgPropertyAggregatorConfig(int index, PropertyMetadata valueProperty, PropertyMetadata weightProperty)
     : base(index, "WgtAvg", valueProperty, weightProperty)
 {
 }
        public void Update(Entity entity, ICollection<PropertyAggregatorUpdate> updates, PropertyMetadata property, decimal newValue)
        {
            foreach (var u in updates) {
                _aggregators[u.Config.Index].Update(u.Values, property, newValue);
            }

            if (NoGroupResults) return;

            var key = entity.GetKey(_keyIndex);
            var groupResult = _groupResults[key];
            groupResult.Update(entity, updates, property, newValue);
        }
 public void Update(ValueTuple oldValues, PropertyMetadata property, decimal newValue)
 {
     Debug.Assert(_property == property);
     Value = Value - oldValues.Value0 + newValue;
 }
 protected abstract void UpdateEntity(Entity entity, ICollection<PropertyAggregatorUpdate> updates, PropertyMetadata property, decimal newValue);
 public WgtAvgPropertyAggregatorTest()
 {
     _valueProperty = new PropertyMetadata(0);
     _weightProperty = new PropertyMetadata(1);
     _aggregator = new WgtAvgPropertyAggregator(_valueProperty, _weightProperty);
 }
 public ReadOnlyCollection<PropertyAggregatorConfig> GetAggregatorsUpdateWith(PropertyMetadata property)
 {
     return _aggregatorsUpdateWith[property.Index];
 }
 public static AggregationChange Update(Entity entity, ICollection<PropertyAggregatorUpdate> updates, PropertyMetadata property, decimal newValue)
 {
     return new AggregationChange(ChangeType.Update, entity, updates, property, newValue);
 }
        private void EntityOnPropertyChanging(object sender, PropertyEventArgs args)
        {
            Debug.Assert(_changingProperty == null);
            Debug.Assert(_updates == null);

            var entity = (Entity)sender;
            _changingProperty = args.Property;

            var aggregatorsToUpdate = _config.GetAggregatorsUpdateWith(args.Property);
            if (aggregatorsToUpdate != null)
            {
                _updates = GetUpdates(entity, aggregatorsToUpdate);
            }
        }
 public WgtAvgPropertyAggregator(PropertyMetadata valueProperty, PropertyMetadata weightProperty)
 {
     _valueProperty = valueProperty;
     _weightProperty = weightProperty;
 }
 public PropertyEventArgs(PropertyMetadata property)
 {
     _property = property;
 }
 public AvgPropertyAggregatorConfig(int index, PropertyMetadata property)
     : base(index, "Avg", property)
 {
 }