public P_Set <T> Add(T value) { var add = Adds.FirstOrDefault(e => e.Id == value.Id); var remove = Removes.FirstOrDefault(e => e.Id == value.Id); if (add is not null || remove is not null) { return(this); } return(new(Adds.Add(value), Removes)); }
public LWW_SetWithVC <T> Remove(T value, VectorClock vectorClock) { if (Adds.Any(a => Equals(a.Value, value) && a.VectorClock < vectorClock)) { var element = Removes.FirstOrDefault(r => r.Value.Id == value.Id); ImmutableHashSet <LWW_SetWithVCElement <T> > elements = Removes; if (element is not null) { elements = Removes.Remove(element); } return(new(Adds, elements.Add(new LWW_SetWithVCElement <T>(value, vectorClock)))); } return(this); }
public LWW_Set <T> Remove(T value, long timestamp) { if (Adds.Any(a => Equals(a.Value, value) && a.Timestamp < timestamp)) { var element = Removes.FirstOrDefault(r => r.Value.Id == value.Id); ImmutableHashSet <LWW_SetElement <T> > elements = Removes; if (element is not null) { elements = Removes.Remove(element); } return(new(Adds, elements.Add(new LWW_SetElement <T>(value, timestamp)))); } return(this); }