示例#1
0
        public void ClearChangesMask <T, U>(BaseUpdateData <T> updateData, ref UpdateField <U> updateField) where T : new() where U : new()
        {
            _changesMask.Reset(updateData.Bit);

            IHasChangesMask hasChangesMask = (IHasChangesMask)updateField._value;

            if (hasChangesMask != null)
            {
                hasChangesMask.ClearChangesMask();
            }
        }
示例#2
0
 public void InsertValue(int index, T value)
 {
     _values.Insert(index, value);
     for (int i = index; i < _values.Count; ++i)
     {
         MarkChanged(i);
         // also mark all fields of value as changed
         IHasChangesMask hasChangesMask = (IHasChangesMask)_values[i];
         if (hasChangesMask != null)
         {
             hasChangesMask.GetUpdateMask().SetAll();
         }
     }
 }
示例#3
0
        public void AddValue(T value)
        {
            MarkChanged(_values.Count);

            if (value is IHasChangesMask)
            {
                IHasChangesMask hasChanges = (IHasChangesMask)value;
                if (hasChanges != null)
                {
                    hasChanges.GetUpdateMask().SetAll();
                }
            }

            _values.Add(value);
        }
示例#4
0
 public void RemoveValue(int index)
 {
     // remove by shifting entire container - client might rely on values being sorted for certain fields
     _values.RemoveAt(index);
     for (int i = index; i < _values.Count; ++i)
     {
         MarkChanged(i);
         // also mark all fields of value as changed
         IHasChangesMask hasChanges = (IHasChangesMask)_values[i];
         if (hasChanges != null)
         {
             hasChanges.GetUpdateMask().SetAll();
         }
     }
     if ((_values.Count % 32) != 0)
     {
         _updateMask[UpdateMask.GetBlockIndex(_values.Count)] &= (uint)~UpdateMask.GetBlockFlag(_values.Count);
     }
     else
     {
         _updateMask.RemoveAt(_updateMask.Count - 1);
     }
 }