Unstable v0.19.1.0
This commit is contained in:
@@ -5,5 +5,13 @@ namespace Barotrauma
|
||||
private None() { }
|
||||
|
||||
public static Option<T> Create() => new None<T>();
|
||||
|
||||
public override Option<T> Fallback(Option<T> fallback) => fallback;
|
||||
public override T Fallback(T fallback) => fallback;
|
||||
|
||||
public override bool ValueEquals(T value) => false;
|
||||
|
||||
public override string ToString()
|
||||
=> $"None<{typeof(T).Name}>";
|
||||
}
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
#nullable enable
|
||||
using System;
|
||||
|
||||
namespace Barotrauma
|
||||
@@ -23,7 +24,7 @@ namespace Barotrauma
|
||||
outValue = value;
|
||||
return true;
|
||||
case None<T> _:
|
||||
outValue = default;
|
||||
outValue = default!;
|
||||
return false;
|
||||
default:
|
||||
throw new ArgumentOutOfRangeException();
|
||||
@@ -37,5 +38,30 @@ namespace Barotrauma
|
||||
None<T> _ => Option<TType>.None(),
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
|
||||
public abstract Option<T> Fallback(Option<T> fallback);
|
||||
public abstract T Fallback(T fallback);
|
||||
|
||||
public abstract bool ValueEquals(T value);
|
||||
|
||||
public override bool Equals(object? obj)
|
||||
=> obj switch
|
||||
{
|
||||
Some<T> { Value: var value } => this is Some<T> { Value: { } selfValue } && selfValue.Equals(value),
|
||||
None<T> _ => IsNone(),
|
||||
T value => this is Some<T> { Value: { } selfValue } && selfValue.Equals(value),
|
||||
_ => false
|
||||
};
|
||||
|
||||
public override int GetHashCode()
|
||||
=> this is Some<T> { Value: { } value } ? value.GetHashCode() : 0;
|
||||
|
||||
public static bool operator ==(Option<T> a, Option<T> b)
|
||||
=> a.Equals(b);
|
||||
|
||||
public static bool operator !=(Option<T> a, Option<T> b)
|
||||
=> !(a == b);
|
||||
|
||||
public abstract override string ToString();
|
||||
}
|
||||
}
|
||||
@@ -13,5 +13,13 @@ namespace Barotrauma
|
||||
}
|
||||
|
||||
public static Option<T> Create(T value) => new Some<T>(value);
|
||||
|
||||
public override Option<T> Fallback(Option<T> fallback) => this;
|
||||
public override T Fallback(T fallback) => Value;
|
||||
|
||||
public override bool ValueEquals(T value) => Value.Equals(value);
|
||||
|
||||
public override string ToString()
|
||||
=> $"Some<{typeof(T).Name}>({Value})";
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user