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); } )); }
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()); }
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); })); }