Struct Bitmask<T>
- Namespace
- LfrlAnvil
- Assembly
- LfrlAnvil.Core.dll
Represents a lightweight generic bitmask.
public readonly struct Bitmask<T> : IEquatable<Bitmask<T>>, IComparable<Bitmask<T>>, IComparable, IReadOnlyCollection<T>, IEnumerable<T>, IEnumerable where T : struct, IConvertible, IComparable
Type Parameters
TValue type.
- Implements
-
IEquatable<Bitmask<T>>IComparable<Bitmask<T>>IEnumerable<T>
- Inherited Members
- Extension Methods
Remarks
Type initialization may throw exceptions of BitmaskTypeInitializationException type when the value type is not convertible to and from ulong or when value type is an Enum without the FlagsAttribute or does not have a member with its underlying value equal to 0.
Constructors
Bitmask(T)
Creates a new Bitmask<T> instance.
public Bitmask(T value)
Parameters
valueTBitmask value.
Fields
All
Represents a bitmask with all available bits set to 1.
public static readonly Bitmask<T> All
Field Value
- Bitmask<T>
BaseType
Specifies the base type of the underlying value type.
public static readonly Type BaseType
Field Value
BitCount
Specifies the size of the bitmask in bits.
public static readonly int BitCount
Field Value
Empty
Represents an empty bitmask with all bits set to 0.
public static readonly Bitmask<T> Empty
Field Value
- Bitmask<T>
FromLongValue
Delegate used for conversion of ulong to the underlying value type.
public static readonly Func<ulong, T> FromLongValue
Field Value
IsEnum
Specifies whether or not the underlying value type is an Enum.
public static readonly bool IsEnum
Field Value
ToLongValue
Delegate used for conversion of the underlying value type to ulong.
public static readonly Func<T, ulong> ToLongValue
Field Value
Properties
Count
Specifies the number of set bits in this instance.
public int Count { get; }
Property Value
Value
Underlying value.
public T Value { get; }
Property Value
- T
Methods
Alternate(Bitmask<T>)
Creates a new Bitmask<T> instance by calculating bitwise xor
on this instance and the provided other.
[Pure]
public Bitmask<T> Alternate(Bitmask<T> other)
Parameters
otherBitmask<T>Value to bitwise xor.
Returns
- Bitmask<T>
New Bitmask<T> instance.
Alternate(T)
Creates a new Bitmask<T> instance by calculating bitwise xor
on this instance and the provided value.
[Pure]
public Bitmask<T> Alternate(T value)
Parameters
valueTValue to bitwise xor.
Returns
- Bitmask<T>
New Bitmask<T> instance.
Clear()
Creates a new Bitmask<T> instance with all bits unset.
[Pure]
public Bitmask<T> Clear()
Returns
- Bitmask<T>
New Bitmask<T> instance.
CompareTo(Bitmask<T>)
Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.
[Pure]
public int CompareTo(Bitmask<T> other)
Parameters
otherBitmask<T>An object to compare with this instance.
Returns
- int
A value that indicates the relative order of the objects being compared. The return value has these meanings:
Value Meaning Less than zero This instance precedes otherin the sort order.Zero This instance occurs in the same position in the sort order as other.Greater than zero This instance follows otherin the sort order.
CompareTo(object?)
Compares the current instance with another object of the same type and returns an integer that indicates whether the current instance precedes, follows, or occurs in the same position in the sort order as the other object.
[Pure]
public int CompareTo(object? obj)
Parameters
objobjectAn object to compare with this instance.
Returns
- int
A value that indicates the relative order of the objects being compared. The return value has these meanings:
Value Meaning Less than zero This instance precedes objin the sort order.Zero This instance occurs in the same position in the sort order as obj.Greater than zero This instance follows objin the sort order.
Exceptions
- ArgumentException
objis not the same type as this instance.
ContainsAll(Bitmask<T>)
Checks whether or not the Value of this instance
contains all set bits specified by the provided other.
[Pure]
public bool ContainsAll(Bitmask<T> other)
Parameters
otherBitmask<T>Bits to verify.
Returns
- bool
true when this instance contains all set bits specified by the provided
other, otherwise false.
ContainsAll(T)
Checks whether or not the Value of this instance
contains all set bits specified by the provided value.
[Pure]
public bool ContainsAll(T value)
Parameters
valueTBits to verify.
Returns
- bool
true when this instance contains all set bits specified by the provided
value, otherwise false.
ContainsAny(Bitmask<T>)
Checks whether or not the Value of this instance
contains at least one set bit specified by the provided other.
[Pure]
public bool ContainsAny(Bitmask<T> other)
Parameters
otherBitmask<T>Bits to verify.
Returns
- bool
true when this instance contains at least one set bit specified by the provided
other, otherwise false.
ContainsAny(T)
Checks whether or not the Value of this instance
contains at least one set bit specified by the provided value.
[Pure]
public bool ContainsAny(T value)
Parameters
valueTBits to verify.
Returns
- bool
true when this instance contains at least one set bit specified by the provided
value, otherwise false.
ContainsBit(int)
Checks whether or not the Value of this instance
contains set bit at the specified 0-based bitIndex position.
[Pure]
public bool ContainsBit(int bitIndex)
Parameters
bitIndexint0-based bit position to verify.
Returns
- bool
true when this instance contains set bit at the specified 0-based
bitIndexposition, otherwise false.
Exceptions
- ArgumentOutOfRangeException
When
bitIndexis less than 0 or greater than or equal to BitCount.
Equals(Bitmask<T>)
Indicates whether the current object is equal to another object of the same type.
[Pure]
public bool Equals(Bitmask<T> other)
Parameters
otherBitmask<T>An object to compare with this object.
Returns
Equals(object?)
Indicates whether this instance and a specified object are equal.
[Pure]
public override bool Equals(object? obj)
Parameters
objobjectThe object to compare with the current instance.
Returns
- bool
true if
objand this instance are the same type and represent the same value; otherwise, false.
GetEnumerator()
Creates a new Bitmask<T>.Enumerator instance for this bitmask.
[Pure]
public Bitmask<T>.Enumerator GetEnumerator()
Returns
- Bitmask<T>.Enumerator
New Bitmask<T>.Enumerator instance.
GetHashCode()
Returns the hash code for this instance.
[Pure]
public override int GetHashCode()
Returns
- int
A 32-bit signed integer that is the hash code for this instance.
Intersect(Bitmask<T>)
Creates a new Bitmask<T> instance by calculating bitwise and
on this instance and the provided other.
[Pure]
public Bitmask<T> Intersect(Bitmask<T> other)
Parameters
otherBitmask<T>Value to bitwise and.
Returns
- Bitmask<T>
New Bitmask<T> instance.
Intersect(T)
Creates a new Bitmask<T> instance by calculating bitwise and
on this instance and the provided value.
[Pure]
public Bitmask<T> Intersect(T value)
Parameters
valueTValue to bitwise and.
Returns
- Bitmask<T>
New Bitmask<T> instance.
Negate()
Creates a new Bitmask<T> instance by calculating bitwise not on this instance.
[Pure]
public Bitmask<T> Negate()
Returns
- Bitmask<T>
New Bitmask<T> instance.
Sanitize()
Creates a new Bitmask<T> instance by sanitizing this instance by calculating bitwise and with All available values.
[Pure]
public Bitmask<T> Sanitize()
Returns
- Bitmask<T>
New Bitmask<T> instance.
Set(Bitmask<T>)
Creates a new Bitmask<T> instance by calculating bitwise or
on this instance and the provided other.
[Pure]
public Bitmask<T> Set(Bitmask<T> other)
Parameters
otherBitmask<T>Value to bitwise or.
Returns
- Bitmask<T>
New Bitmask<T> instance.
Set(T)
Creates a new Bitmask<T> instance by calculating bitwise or
on this instance and the provided value.
[Pure]
public Bitmask<T> Set(T value)
Parameters
valueTValue to bitwise or.
Returns
- Bitmask<T>
New Bitmask<T> instance.
SetBit(int)
Creates a new Bitmask<T> instance by setting a bit at the specified 0-based bitIndex position
in the Value of this instance.
[Pure]
public Bitmask<T> SetBit(int bitIndex)
Parameters
bitIndexint0-based position of a bit to set.
Returns
- Bitmask<T>
New Bitmask<T> instance.
Exceptions
- ArgumentOutOfRangeException
When
bitIndexis less than 0 or greater than or equal to BitCount.
ToString()
Returns a string representation of this Bitmask<T> instance.
[Pure]
public override string ToString()
Returns
- string
String representation.
Unset(Bitmask<T>)
Creates a new Bitmask<T> instance by unsetting provided bits in the Value of this instance.
[Pure]
public Bitmask<T> Unset(Bitmask<T> other)
Parameters
otherBitmask<T>Bits to unset.
Returns
- Bitmask<T>
New Bitmask<T> instance.
Unset(T)
Creates a new Bitmask<T> instance by unsetting provided bits in the Value of this instance.
[Pure]
public Bitmask<T> Unset(T value)
Parameters
valueTBits to unset.
Returns
- Bitmask<T>
New Bitmask<T> instance.
UnsetBit(int)
Creates a new Bitmask<T> instance by unsetting a bit at the specified 0-based bitIndex position
in the Value of this instance.
[Pure]
public Bitmask<T> UnsetBit(int bitIndex)
Parameters
bitIndexint0-based position of a bit to unset.
Returns
- Bitmask<T>
New Bitmask<T> instance.
Exceptions
- ArgumentOutOfRangeException
When
bitIndexis less than 0 or greater than or equal to BitCount.
Operators
operator &(Bitmask<T>, Bitmask<T>)
Creates a new Bitmask<T> instance by performing bitwise and on a and b.
[Pure]
public static Bitmask<T> operator &(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator &(Bitmask<T>, T)
Creates a new Bitmask<T> instance by performing bitwise and on a and b.
[Pure]
public static Bitmask<T> operator &(Bitmask<T> a, T b)
Parameters
aBitmask<T>First operand.
bTSecond operand.
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator &(T, Bitmask<T>)
Creates a new Bitmask<T> instance by performing bitwise and on a and b.
[Pure]
public static Bitmask<T> operator &(T a, Bitmask<T> b)
Parameters
aTFirst operand.
bBitmask<T>Second operand.
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator |(Bitmask<T>, Bitmask<T>)
Creates a new Bitmask<T> instance by performing bitwise or on a and b.
[Pure]
public static Bitmask<T> operator |(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator |(Bitmask<T>, T)
Creates a new Bitmask<T> instance by performing bitwise or on a and b.
[Pure]
public static Bitmask<T> operator |(Bitmask<T> a, T b)
Parameters
aBitmask<T>First operand.
bTSecond operand.
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator |(T, Bitmask<T>)
Creates a new Bitmask<T> instance by performing bitwise or on a and b.
[Pure]
public static Bitmask<T> operator |(T a, Bitmask<T> b)
Parameters
aTFirst operand.
bBitmask<T>Second operand.
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator ==(Bitmask<T>, Bitmask<T>)
Checks if a is equal to b.
[Pure]
public static bool operator ==(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- bool
true when operands are equal, otherwise false.
operator ^(Bitmask<T>, Bitmask<T>)
Creates a new Bitmask<T> instance by performing bitwise xor on a and b.
[Pure]
public static Bitmask<T> operator ^(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator ^(Bitmask<T>, T)
Creates a new Bitmask<T> instance by performing bitwise xor on a and b.
[Pure]
public static Bitmask<T> operator ^(Bitmask<T> a, T b)
Parameters
aBitmask<T>First operand.
bTSecond operand.
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator ^(T, Bitmask<T>)
Creates a new Bitmask<T> instance by performing bitwise xor on a and b.
[Pure]
public static Bitmask<T> operator ^(T a, Bitmask<T> b)
Parameters
aTFirst operand.
bBitmask<T>Second operand.
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator >(Bitmask<T>, Bitmask<T>)
Checks if a is greater than b.
[Pure]
public static bool operator >(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- bool
true when
ais greater thanb, otherwise false.
operator >=(Bitmask<T>, Bitmask<T>)
Checks if a is greater than or equal to b.
[Pure]
public static bool operator >=(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- bool
true when
ais greater than or equal tob, otherwise false.
implicit operator T(Bitmask<T>)
Converts the provided b to the underlying value type. Returns Value.
[Pure]
public static implicit operator T(Bitmask<T> b)
Parameters
bBitmask<T>Bitmask to convert.
Returns
- T
Value from the provided
b.
implicit operator Bitmask<T>(T)
Converts the provided v to Bitmask<T> type.
[Pure]
public static implicit operator Bitmask<T>(T v)
Parameters
vTValue to convert.
Returns
- Bitmask<T>
New Bitmask<T> instance.
operator !=(Bitmask<T>, Bitmask<T>)
Checks if a is not equal to b.
[Pure]
public static bool operator !=(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- bool
true when operands are not equal, otherwise false.
operator <(Bitmask<T>, Bitmask<T>)
Checks if a is less than b.
[Pure]
public static bool operator <(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- bool
true when
ais less thanb, otherwise false.
operator <=(Bitmask<T>, Bitmask<T>)
Checks if a is less than or equal to b.
[Pure]
public static bool operator <=(Bitmask<T> a, Bitmask<T> b)
Parameters
Returns
- bool
true when
ais less than or equal tob, otherwise false.
operator ~(Bitmask<T>)
Creates a new Bitmask<T> instance by performing bitwise not on a.
[Pure]
public static Bitmask<T> operator ~(Bitmask<T> a)
Parameters
aBitmask<T>Operand.
Returns
- Bitmask<T>
New Bitmask<T> instance.