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 }); }
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; }
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) { }