ValidityState
A class for representing the current validity state.
using System;
namespace AngleSharp.Dom.Html
{
internal sealed class ValidityState : IValidityState
{
[Flags]
private enum ErrorType
{
None = 0,
ValueMissing = 1,
TypeMismatch = 2,
PatternMismatch = 4,
TooLong = 8,
TooShort = 16,
RangeUnderflow = 32,
RangeOverflow = 64,
StepMismatch = 128,
BadInput = 256,
Custom = 512
}
private ErrorType _err;
public bool IsValueMissing {
get {
return _err.HasFlag(ErrorType.ValueMissing);
}
set {
Set(IsValueMissing, value, ErrorType.ValueMissing);
}
}
public bool IsTypeMismatch {
get {
return _err.HasFlag(ErrorType.TypeMismatch);
}
set {
Set(IsTypeMismatch, value, ErrorType.TypeMismatch);
}
}
public bool IsPatternMismatch {
get {
return _err.HasFlag(ErrorType.PatternMismatch);
}
set {
Set(IsPatternMismatch, value, ErrorType.PatternMismatch);
}
}
public bool IsBadInput {
get {
return _err.HasFlag(ErrorType.BadInput);
}
set {
Set(IsBadInput, value, ErrorType.BadInput);
}
}
public bool IsTooLong {
get {
return _err.HasFlag(ErrorType.TooLong);
}
set {
Set(IsTooLong, value, ErrorType.TooLong);
}
}
public bool IsTooShort {
get {
return _err.HasFlag(ErrorType.TooShort);
}
set {
Set(IsTooShort, value, ErrorType.TooShort);
}
}
public bool IsRangeUnderflow {
get {
return _err.HasFlag(ErrorType.RangeUnderflow);
}
set {
Set(IsRangeUnderflow, value, ErrorType.RangeUnderflow);
}
}
public bool IsRangeOverflow {
get {
return _err.HasFlag(ErrorType.RangeOverflow);
}
set {
Set(IsRangeOverflow, value, ErrorType.RangeOverflow);
}
}
public bool IsStepMismatch {
get {
return _err.HasFlag(ErrorType.StepMismatch);
}
set {
Set(IsStepMismatch, value, ErrorType.StepMismatch);
}
}
public bool IsCustomError {
get {
return _err.HasFlag(ErrorType.Custom);
}
set {
Set(IsCustomError, value, ErrorType.Custom);
}
}
public bool IsValid => _err == ErrorType.None;
internal ValidityState()
{
_err = ErrorType.None;
}
public void Reset()
{
_err = ErrorType.None;
}
private void Set(bool oldValue, bool newValue, ErrorType err)
{
if (newValue != oldValue)
_err ^= err;
}
}
}