Esempio n. 1
0
        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));
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        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);
        }