示例#1
0
        private IChangeSet <T> UpdateResultList(IChangeSet <T> changes, List <ReferenceCountTracker <T> > sourceLists, ChangeAwareListWithRefCounts <T> resultList)
        {
            //child caches have been updated before we reached this point.
            foreach (var change in changes.Flatten())
            {
                var item             = change.Current;
                var isInResult       = resultList.Contains(item);
                var shouldBeInResult = MatchesConstraint(sourceLists, item);

                if (shouldBeInResult)
                {
                    if (!isInResult)
                    {
                        resultList.Add(item);
                    }
                }
                else
                {
                    if (isInResult)
                    {
                        resultList.Remove(item);
                    }
                }
            }
            return(resultList.CaptureChanges());
        }
示例#2
0
        private IChangeSet <T> UpdateResultList(IChangeSet <T> changes)
        {
            //child caches have been updated before we reached this point.
            changes.Flatten().ForEach(change =>
            {
                var item             = change.Current;
                var isInResult       = _resultList.Contains(item);
                var shouldBeInResult = MatchesConstraint(item);

                if (shouldBeInResult)
                {
                    if (!isInResult)
                    {
                        _resultList.Add(item);
                    }
                }
                else
                {
                    if (isInResult)
                    {
                        _resultList.Remove(item);
                    }
                }
            });
            return(_resultList.CaptureChanges());
        }
示例#3
0
        private void ProcessItem(MergeContainer[] sourceLists, ChangeAwareListWithRefCounts <T> resultingList, T item)
        {
            //check whether the item should be removed from the list
            var isInResult       = resultingList.Contains(item);
            var shouldBeInResult = MatchesConstraint(sourceLists, item);

            if (shouldBeInResult)
            {
                if (!isInResult)
                {
                    resultingList.Add(item);
                }
            }
            else
            {
                if (isInResult)
                {
                    resultingList.Remove(item);
                }
            }
        }