using System; using System.Collections.Generic; namespace UnityAtoms { internal abstract class BaseObservable : IObservable { protected List> _observers = new List>(); protected abstract bool IsCompleted { get; } public IDisposable Subscribe(IObserver observer) { if (!_observers.Contains(observer)) _observers.Add(observer); return new ObservableUnsubscriber(_observers, observer); } protected void OnCompleted() { if (IsCompleted) { for (int i = 0; _observers != null && i < _observers.Count; ++i) { _observers[i].OnCompleted(); } } } protected void OnError(Exception e) { for (int i = 0; _observers != null && i < _observers.Count; ++i) { _observers[i].OnError(e); } } } }