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