Exemplo n.º 1
0
        TryRemove <T>(IDependencyValueProvider provider, DependencyProperty <T> key, out IEffectiveValue <T> value)
        {
            var             storage  = GetStorage(provider, key);
            var             priority = provider.Priority;
            IEffectiveValue eValue;

            if (storage.TryGetValue(priority, out eValue))
            {
                value = (IEffectiveValue <T>)eValue;
                var index = storage.IndexOfKey(priority);
                storage.RemoveAt(index);
#if ECS_SERVER
                return(OnEffectiveValueCleared(index, key, value.Value)
                       .ContinueWith(t => true));
#else
                OnEffectiveValueCleared(index, key, value.Value);
                return(true);
#endif
            }

            value = null;
#if ECS_SERVER
            return(Task.FromResult(false));
#else
            return(false);
#endif
        }
Exemplo n.º 2
0
        private SortedList <float, IEffectiveValue> GetStorage(IDependencyValueProvider provider, DependencyProperty key)
        {
            SortedList <float, IEffectiveValue> lst;

            if (!_dict.TryGetValue(key, out lst))
            {
                _dict.Add(key, lst = new SortedList <float, IEffectiveValue>());
            }
            return(lst);
        }
Exemplo n.º 3
0
        public bool TryGetValue <T>(IDependencyValueProvider provider, DependencyProperty <T> key, out IEffectiveValue <T> value)
        {
            var             storage = GetStorage(provider, key);
            IEffectiveValue eValue;

            if (storage.TryGetValue(provider.Priority, out eValue))
            {
                value = (IEffectiveValue <T>)eValue;
                return(true);
            }
            value = null;
            return(false);
        }
Exemplo n.º 4
0
        IEffectiveValue AddOrUpdate <T>(IDependencyValueProvider provider, DependencyProperty <T> key, Func <DependencyProperty, IEffectiveValue <T> > addValueFactory, Func <DependencyProperty, IEffectiveValue <T>, IEffectiveValue <T> > updateValueFactory)
#endif
        {
            var             storage  = GetStorage(provider, key);
            var             priority = provider.Priority;
            IEffectiveValue result;
            var             oldIdx = storage.IndexOfKey(priority);

            if (oldIdx == -1)
            {
                var value = addValueFactory(key);
                storage.Add(priority, value);
                value.ValueChanged = (s, e) => OnEffectiveValueChanged(priority, key, e.OldValue, e.NewValue);
                result             = value;
                var raiseChanged = storage.IndexOfKey(priority) == 0;
                if (raiseChanged)
                {
#if ECS_SERVER
                    await
#endif
                    OnCurrentValueChanged(key, false, null, true, value.Value);
                }
            }
            else
            {
                var oldValue = (IEffectiveValue <T>)storage.Values[oldIdx];
                var newValue =
#if ECS_SERVER
                    await
#endif
                    updateValueFactory(key, oldValue);
                if (oldValue != newValue)
                {
                    oldValue.ValueChanged = null;
                    newValue.ValueChanged = (s, e) => OnEffectiveValueChanged(priority, key, e.OldValue, e.NewValue);
                    storage[priority]     = newValue;
                    var raiseChanged = oldIdx == 0;
                    if (raiseChanged)
                    {
#if ECS_SERVER
                        await
#endif
                        OnCurrentValueChanged(key, true, oldValue.Value, true, newValue.Value);
                    }
                }

                result = newValue;
            }

            return(result);
        }
Exemplo n.º 5
0
        public bool TryRemove <T>(IDependencyValueProvider provider, DependencyProperty <T> key, out IEffectiveValue <T> value)
        {
            var             storage  = GetStorage(provider, key);
            var             priority = provider.Priority;
            IEffectiveValue eValue;

            if (storage.TryGetValue(priority, out eValue))
            {
                value = (IEffectiveValue <T>)eValue;
                var index = storage.IndexOfKey(priority);
                storage.RemoveAt(index);
                OnEffectiveValueCleared(index, key, value.Value);
                return(true);
            }
            value = null;
            return(false);
        }
Exemplo n.º 6
0
 public bool TryRemove <T>(IDependencyValueProvider provider, DependencyProperty <T> key, out IEffectiveValue <T> value)
 {
     throw new NotSupportedException();
 }
Exemplo n.º 7
0
 public IEffectiveValue AddOrUpdate <T>(IDependencyValueProvider provider, DependencyProperty <T> key, Func <DependencyProperty, IEffectiveValue <T> > addValueFactory, Func <DependencyProperty, IEffectiveValue <T>, IEffectiveValue <T> > updateValueFactory)
 {
     throw new NotSupportedException();
 }
Exemplo n.º 8
0
 async Task <IEffectiveValue> AddOrUpdate <T>(IDependencyValueProvider provider, DependencyProperty <T> key, Func <DependencyProperty, IEffectiveValue <T> > addValueFactory, Func <DependencyProperty, IEffectiveValue <T>, Task <IEffectiveValue <T> > > updateValueFactory)