Example #1
0
        public V this[K key]
        {
            get { return(myMap[key]); }
            set
            {
                V    oldval;
                bool isUpdate = myMap.TryGetValue(key, out oldval);
                if (isUpdate && Equals(oldval, value))
                {
                    return;
                }

                myMap[key] = value;

                // ReSharper disable once ConvertIfStatementToConditionalTernaryExpression
                if (isUpdate)
                {
                    myChange.Fire(MapEvent <K, V> .Update(key, oldval, value));
                }
                else
                {
                    myChange.Fire(MapEvent <K, V> .Add(key, value));
                }
            }
        }
Example #2
0
        public bool Remove(TK key)
        {
            if (!myStorage.TryGetValue(key, out var value))
            {
                return(false);
            }
            myStorage.Remove(key);

            myChange.Fire(MapEvent <TK, TV> .Remove(key, value));

            return(true);
        }
Example #3
0
        public void Clear()
        {
            var changes = new List <MapEvent <TK, TV> >(Count);

            changes.AddRange(myStorage.Select(kv => MapEvent <TK, TV> .Remove(kv.Key, kv.Value)));

            myStorage.Clear();

            foreach (var change in changes)
            {
                myChange.Fire(change);
            }
        }
Example #4
0
        public bool Remove(K key)
        {
            V value;

            if (!myMap.TryGetValue(key, out value))
            {
                return(false);
            }
            myMap.Remove(key);

            myChange.Fire(MapEvent <K, V> .Remove(key, value));

            return(true);
        }
Example #5
0
 public void Advise(Lifetime lifetime, Action <MapEvent <K, V> > handler)
 {
     foreach (var kv in this)
     {
         try
         {
             handler(MapEvent <K, V> .Add(kv.Key, kv.Value));
         }
         catch (Exception e)
         {
             Log.Root.Error(e);
         }
     }
     myChange.Advise(lifetime, handler);
 }
Example #6
0
 public void Add(TK key, TV value)
 {
     myStorage.Add(key, value);
     myChange.Fire(MapEvent <TK, TV> .Add(key, value));
 }
Example #7
0
 public void Add(K key, V value)
 {
     myMap.Add(key, value);
     myChange.Fire(MapEvent <K, V> .Add(key, value));
 }