using System; namespace UnityEngine.InputSystem.Utilities { internal class WhereObservable<TValue> : IObservable<TValue> { private readonly IObservable<TValue> m_Source; private readonly Func<TValue, bool> m_Predicate; public WhereObservable(IObservable<TValue> source, Func<TValue, bool> predicate) { m_Source = source; m_Predicate = predicate; } public IDisposable Subscribe(IObserver<TValue> observer) { return m_Source.Subscribe(new Where(this, observer)); } private class Where : IObserver<TValue> { private WhereObservable<TValue> m_Observable; private readonly IObserver<TValue> m_Observer; public Where(WhereObservable<TValue> observable, IObserver<TValue> observer) { m_Observable = observable; m_Observer = observer; } public void OnCompleted() { } public void OnError(Exception error) { Debug.LogException(error); } public void OnNext(TValue evt) { if (m_Observable.m_Predicate(evt)) m_Observer.OnNext(evt); } } } }