暫無描述
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

SelectManyObservable.cs 1.4KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. using System;
  2. using System.Collections.Generic;
  3. namespace UnityEngine.InputSystem.Utilities
  4. {
  5. internal class SelectManyObservable<TSource, TResult> : IObservable<TResult>
  6. {
  7. private readonly IObservable<TSource> m_Source;
  8. private readonly Func<TSource, IEnumerable<TResult>> m_Filter;
  9. public SelectManyObservable(IObservable<TSource> source, Func<TSource, IEnumerable<TResult>> filter)
  10. {
  11. m_Source = source;
  12. m_Filter = filter;
  13. }
  14. public IDisposable Subscribe(IObserver<TResult> observer)
  15. {
  16. return m_Source.Subscribe(new Select(this, observer));
  17. }
  18. private class Select : IObserver<TSource>
  19. {
  20. private SelectManyObservable<TSource, TResult> m_Observable;
  21. private readonly IObserver<TResult> m_Observer;
  22. public Select(SelectManyObservable<TSource, TResult> observable, IObserver<TResult> observer)
  23. {
  24. m_Observable = observable;
  25. m_Observer = observer;
  26. }
  27. public void OnCompleted()
  28. {
  29. }
  30. public void OnError(Exception error)
  31. {
  32. Debug.LogException(error);
  33. }
  34. public void OnNext(TSource evt)
  35. {
  36. foreach (var result in m_Observable.m_Filter(evt))
  37. m_Observer.OnNext(result);
  38. }
  39. }
  40. }
  41. }