UniRx 에셋 추가
This commit is contained in:
@@ -0,0 +1,134 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Text;
|
||||
|
||||
namespace UniRx.InternalUtil
|
||||
{
|
||||
public class ListObserver<T> : IObserver<T>
|
||||
{
|
||||
private readonly ImmutableList<IObserver<T>> _observers;
|
||||
|
||||
public ListObserver(ImmutableList<IObserver<T>> observers)
|
||||
{
|
||||
_observers = observers;
|
||||
}
|
||||
|
||||
public void OnCompleted()
|
||||
{
|
||||
var targetObservers = _observers.Data;
|
||||
for (int i = 0; i < targetObservers.Length; i++)
|
||||
{
|
||||
targetObservers[i].OnCompleted();
|
||||
}
|
||||
}
|
||||
|
||||
public void OnError(Exception error)
|
||||
{
|
||||
var targetObservers = _observers.Data;
|
||||
for (int i = 0; i < targetObservers.Length; i++)
|
||||
{
|
||||
targetObservers[i].OnError(error);
|
||||
}
|
||||
}
|
||||
|
||||
public void OnNext(T value)
|
||||
{
|
||||
var targetObservers = _observers.Data;
|
||||
for (int i = 0; i < targetObservers.Length; i++)
|
||||
{
|
||||
targetObservers[i].OnNext(value);
|
||||
}
|
||||
}
|
||||
|
||||
internal IObserver<T> Add(IObserver<T> observer)
|
||||
{
|
||||
return new ListObserver<T>(_observers.Add(observer));
|
||||
}
|
||||
|
||||
internal IObserver<T> Remove(IObserver<T> observer)
|
||||
{
|
||||
var i = Array.IndexOf(_observers.Data, observer);
|
||||
if (i < 0)
|
||||
return this;
|
||||
|
||||
if (_observers.Data.Length == 2)
|
||||
{
|
||||
return _observers.Data[1 - i];
|
||||
}
|
||||
else
|
||||
{
|
||||
return new ListObserver<T>(_observers.Remove(observer));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class EmptyObserver<T> : IObserver<T>
|
||||
{
|
||||
public static readonly EmptyObserver<T> Instance = new EmptyObserver<T>();
|
||||
|
||||
EmptyObserver()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void OnCompleted()
|
||||
{
|
||||
}
|
||||
|
||||
public void OnError(Exception error)
|
||||
{
|
||||
}
|
||||
|
||||
public void OnNext(T value)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class ThrowObserver<T> : IObserver<T>
|
||||
{
|
||||
public static readonly ThrowObserver<T> Instance = new ThrowObserver<T>();
|
||||
|
||||
ThrowObserver()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void OnCompleted()
|
||||
{
|
||||
}
|
||||
|
||||
public void OnError(Exception error)
|
||||
{
|
||||
error.Throw();
|
||||
}
|
||||
|
||||
public void OnNext(T value)
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
public class DisposedObserver<T> : IObserver<T>
|
||||
{
|
||||
public static readonly DisposedObserver<T> Instance = new DisposedObserver<T>();
|
||||
|
||||
DisposedObserver()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public void OnCompleted()
|
||||
{
|
||||
throw new ObjectDisposedException("");
|
||||
}
|
||||
|
||||
public void OnError(Exception error)
|
||||
{
|
||||
throw new ObjectDisposedException("");
|
||||
}
|
||||
|
||||
public void OnNext(T value)
|
||||
{
|
||||
throw new ObjectDisposedException("");
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user