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