Example #1
0
        public override void UnionWith(IEnumerable <E> other)
        {
            foreach (E v in other)
            {
                if (null == v)
                {
                    throw new ArgumentNullException();
                }
            }

            if (this.IsManaged)
            {
                var txn = Transaction.Current;
                txn.VerifyRecordAccessed(this);
                var oldv = txn.GetLog(LogKey) is LogV log ? log.Value : set;
                var newv = oldv.Union(other);
                if (newv != oldv)
                {
                    txn.PutLog(NewLog(newv));
                    ChangeNoteSet <E> note = (ChangeNoteSet <E>)txn.GetOrAddChangeNote(this.ObjectId, () => new ChangeNoteSet <E>(this));
                    foreach (var item in other)
                    {
                        if (false == oldv.Contains(item))
                        {
                            note.LogAdd(item);
                        }
                    }
                }
            }
            else
            {
                set = set.Union(other);
            }
        }
Example #2
0
 public override void SymmetricExceptWith(IEnumerable <E> other)
 {
     if (this.IsManaged)
     {
         var txn = Transaction.Current;
         txn.VerifyRecordAccessed(this);
         var oldv = txn.GetLog(LogKey) is LogV log ? log.Value : set;
         var newv = oldv.SymmetricExcept(other);
         if (newv != oldv)
         {
             txn.PutLog(NewLog(newv));
             ChangeNoteSet <E> note = (ChangeNoteSet <E>)txn.GetOrAddChangeNote(this.ObjectId, () => new ChangeNoteSet <E>(this));
             // this: 1,2 other: 2,3 result: 1,3
             foreach (var item in other)
             {
                 if (oldv.Contains(item))
                 {
                     note.LogRemove(item);
                 }
                 else
                 {
                     note.LogAdd(item);
                 }
             }
         }
     }
     else
     {
         set = set.SymmetricExcept(other);
     }
 }