Priority
A priority object for comparing priorities.
using System;
using System.Runtime.InteropServices;
namespace AngleSharp.Css
{
[StructLayout(LayoutKind.Explicit, CharSet = CharSet.Unicode, Pack = 1)]
public struct Priority : IEquatable<Priority>
{
[FieldOffset(0)]
private byte ;
[FieldOffset(1)]
private byte classes;
[FieldOffset(2)]
private byte ids;
[FieldOffset(3)]
private byte inlines;
[FieldOffset(0)]
private uint priority;
public static readonly Priority Zero = new Priority(0);
public static readonly Priority OneTag = new Priority(0, 0, 0, 1);
public static readonly Priority OneClass = new Priority(0, 0, 1, 0);
public static readonly Priority OneId = new Priority(0, 1, 0, 0);
public static readonly Priority Inline = new Priority(1, 0, 0, 0);
public byte Tags => tags;
public byte Classes => classes;
public byte Ids => ids;
public byte Inlines => inlines;
public Priority(uint priority)
{
inlines = (ids = (classes = (tags = 0)));
this.priority = priority;
}
public Priority(byte inlines, byte ids, byte classes, byte tags)
{
priority = 0;
this.inlines = inlines;
this.ids = ids;
this.classes = classes;
this.tags = tags;
}
public static Priority operator +(Priority a, Priority b)
{
return new Priority(a.priority + b.priority);
}
public static bool operator ==(Priority a, Priority b)
{
return a.priority == b.priority;
}
public static bool operator >(Priority a, Priority b)
{
return a.priority > b.priority;
}
public static bool operator >=(Priority a, Priority b)
{
return a.priority >= b.priority;
}
public static bool operator <(Priority a, Priority b)
{
return a.priority < b.priority;
}
public static bool operator <=(Priority a, Priority b)
{
return a.priority <= b.priority;
}
public static bool operator !=(Priority a, Priority b)
{
return a.priority != b.priority;
}
public bool Equals(Priority other)
{
return priority == other.priority;
}
public override bool Equals(object obj)
{
if (obj is Priority)
return Equals((Priority)obj);
return false;
}
public override int GetHashCode()
{
return (int)priority;
}
public override string ToString()
{
return $"""{inlines}""{ids}""{classes}""{tags}""";
}
}
}