TriState
using System.Diagnostics.CodeAnalysis;
using System.Runtime.CompilerServices;
namespace System.Drawing.Printing
{
internal readonly struct TriState : IEquatable<TriState>
{
private readonly byte _value;
public static TriState Default { get; } = new TriState(0);
public static TriState False { get; } = new TriState(1);
public static TriState True { get; } = new TriState(2);
public bool IsDefault => this == Default;
public bool IsFalse => this == False;
public bool IsNotDefault => this != Default;
public bool IsTrue => this == True;
private TriState(byte value)
{
_value = value;
}
public static bool operator ==(TriState left, TriState right)
{
return left.Equals(right);
}
public static bool operator !=(TriState left, TriState right)
{
return !left.Equals(right);
}
[NullableContext(2)]
public override bool Equals([NotNullWhen(true)] object o)
{
return Equals((TriState)o);
}
public bool Equals(TriState other)
{
return _value == other._value;
}
public override int GetHashCode()
{
return _value;
}
public static implicit operator TriState(bool value)
{
if (!value)
return False;
return True;
}
public static explicit operator bool(TriState value)
{
if (!value.IsDefault)
return value == True;
throw new InvalidCastException(System.SR.TriStateCompareError);
}
[NullableContext(1)]
public override string ToString()
{
if (!(this == Default)) {
if (!(this == False))
return "True";
return "False";
}
return "Default";
}
}
}