ValidityState
A class for representing the current validity state.
using System;
namespace AngleSharp.Dom.Html
{
internal sealed class ValidityState : IValidityState
{
[Flags]
private enum ErrorType : ushort
{
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 & ErrorType.ValueMissing) == ErrorType.ValueMissing;
}
set {
Set(IsValueMissing, value, ErrorType.ValueMissing);
}
}
public bool IsTypeMismatch {
get {
return (_err & ErrorType.TypeMismatch) == ErrorType.TypeMismatch;
}
set {
Set(IsTypeMismatch, value, ErrorType.TypeMismatch);
}
}
public bool IsPatternMismatch {
get {
return (_err & ErrorType.PatternMismatch) == ErrorType.PatternMismatch;
}
set {
Set(IsPatternMismatch, value, ErrorType.PatternMismatch);
}
}
public bool IsBadInput {
get {
return (_err & ErrorType.BadInput) == ErrorType.BadInput;
}
set {
Set(IsBadInput, value, ErrorType.BadInput);
}
}
public bool IsTooLong {
get {
return (_err & ErrorType.TooLong) == ErrorType.TooLong;
}
set {
Set(IsTooLong, value, ErrorType.TooLong);
}
}
public bool IsTooShort {
get {
return (_err & ErrorType.TooShort) == ErrorType.TooShort;
}
set {
Set(IsTooShort, value, ErrorType.TooShort);
}
}
public bool IsRangeUnderflow {
get {
return (_err & ErrorType.RangeUnderflow) == ErrorType.RangeUnderflow;
}
set {
Set(IsRangeUnderflow, value, ErrorType.RangeUnderflow);
}
}
public bool IsRangeOverflow {
get {
return (_err & ErrorType.RangeOverflow) == ErrorType.RangeOverflow;
}
set {
Set(IsRangeOverflow, value, ErrorType.RangeOverflow);
}
}
public bool IsStepMismatch {
get {
return (_err & ErrorType.StepMismatch) == ErrorType.StepMismatch;
}
set {
Set(IsStepMismatch, value, ErrorType.StepMismatch);
}
}
public bool IsCustomError {
get {
return (_err & ErrorType.Custom) == 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;
}
}
}