Exemplo n.º 1
0
        public IObservable <IChangeSet <TDestination> > Run()
        {
            if (_childChanges != null)
            {
                return(CreateWithChangeset());
            }

            return(Observable.Create <IChangeSet <TDestination> >(observer =>
            {
                //NB: ChangeAwareList is used internally by dd to capture changes to a list and ensure they can be replayed by subsequent operators
                var result = new ChangeAwareList <TDestination>();

                return _source.Transform(item => new ManyContainer(_manyselector(item).ToArray()), true)
                .Select(changes =>
                {
                    var destinationChanges = new DestinationEnumerator(changes, _equalityComparer);
                    result.Clone(destinationChanges, _equalityComparer);
                    return result.CaptureChanges();
                })

                .NotEmpty()
                .SubscribeSafe(observer);
            }
                                                                  ));
        }
Exemplo n.º 2
0
 public IObservable <IChangeSet <TDestination> > Run()
 {
     return(_source.Transform(item =>
     {
         //create a container which is used to store state of an item together with it's children
         var many = _manyselector(item).ToArray();
         return new ManyContainer(item, many);
     })
            .Select(changes =>
     {
         var items = new DestinationEnumerator(changes, _equalityComparer);
         return new ChangeSet <TDestination>(items);
     }).NotEmpty());
 }
Exemplo n.º 3
0
        public IObservable <IChangeSet <TDestination, TDestinationKey> > Run()
        {
            return(_source.Transform((source, key) =>
            {
                var many = _manyselector(source)
                           .Select(m => new DestinationContainer(m, _keySelector(m)))
                           .ToArray();

                return new ManyContainer(source, key, many);
            })
                   .Select(changes =>
            {
                var items = new DestinationEnumerator(changes);
                return new ChangeSet <TDestination, TDestinationKey>(items);
            }));
        }