示例#1
0
        private void CreateNewItems(IUpdateImplementer <T> updater)
        {
            foreach (var entity in updater.GetNextFilteredItem())
            {
                T   val;
                var exist = _entitiesAsDict.TryGetValue(entity, out val);

                if (!exist)
                {
                    var crResult = updater.Factory(entity);
                    if (crResult.IsCreated)
                    {
                        _entities.Add(new KeyValuePair <uint, T>(entity, crResult.Result));
                        _entitiesAsDict.Add(entity, crResult.Result);
                        val   = crResult.Result;
                        exist = true;
                    }
                }

                if (exist)
                {
                    updater.Update(entity, val);
                }
            }
        }
示例#2
0
        public void Dispose(IUpdateImplementer <T> updater)
        {
            for (var index = 0; index < _entities.Count; index++)
            {
                var item = _entities[index];
                updater.Dispose(item.Key, item.Value);
            }

            _entities.Clear();
            _entitiesAsDict.Clear();
        }
示例#3
0
        private void RemoveDeletedItems(IUpdateImplementer <T> updater)
        {
            for (var index = 0; index < _entities.Count; index++)
            {
                var kvpCreated = _entities[index];

                if (!updater.HasEntityWithId(kvpCreated.Key))
                {
                    var item = _entities[index];
                    updater.Dispose(item.Key, item.Value);
                    _entities.RemoveAt(index);
                    _entitiesAsDict.Remove(kvpCreated.Key);
                    index--;
                }
            }
        }
示例#4
0
 public void ProcessUpdate(IUpdateImplementer <T> updater)
 {
     RemoveDeletedItems(updater);
     CreateNewItems(updater);
 }