Files
BH3/Assets/Plugins/Assembly-CSharp-firstpass/UniRx/SingleAssignmentDisposable.cs
2025-08-13 09:26:42 +08:00

77 lines
1.1 KiB
C#

using System;
namespace UniRx
{
public class SingleAssignmentDisposable : IDisposable, ICancelable
{
private readonly object gate = new object();
private IDisposable current;
private bool disposed;
public bool IsDisposed
{
get
{
lock (gate)
{
return disposed;
}
}
}
public IDisposable Disposable
{
get
{
return current;
}
set
{
IDisposable disposable = null;
bool flag;
lock (gate)
{
flag = disposed;
disposable = current;
if (!flag)
{
if (value == null)
{
return;
}
current = value;
}
}
if (flag && value != null)
{
value.Dispose();
}
else if (disposable != null)
{
throw new InvalidOperationException("Disposable is already set");
}
}
}
public void Dispose()
{
IDisposable disposable = null;
lock (gate)
{
if (!disposed)
{
disposed = true;
disposable = current;
current = null;
}
}
if (disposable != null)
{
disposable.Dispose();
}
}
}
}