using System; namespace UniRx.InternalUtil { public class ListObserver : IObserver { private readonly ImmutableList> _observers; public ListObserver(ImmutableList> observers) { _observers = observers; } public void OnCompleted() { IObserver[] data = _observers.Data; for (int i = 0; i < data.Length; i++) { data[i].OnCompleted(); } } public void OnError(Exception error) { IObserver[] data = _observers.Data; for (int i = 0; i < data.Length; i++) { data[i].OnError(error); } } public void OnNext(T value) { IObserver[] data = _observers.Data; for (int i = 0; i < data.Length; i++) { data[i].OnNext(value); } } internal IObserver Add(IObserver observer) { return new ListObserver(_observers.Add(observer)); } internal IObserver Remove(IObserver observer) { int num = Array.IndexOf(_observers.Data, observer); if (num < 0) { return this; } if (_observers.Data.Length == 2) { return _observers.Data[1 - num]; } return new ListObserver(_observers.Remove(observer)); } } }