using System.Diagnostics; namespace BizHawk.Common { // I think this is a little faster with uint than with byte public struct Bit { private readonly uint _val; public Bit(uint val) { _val = val; } public static implicit operator Bit(int rhs) { Debug.Assert((rhs & ~1) == 0); return new Bit((uint)rhs); } public static implicit operator Bit(uint rhs) { Debug.Assert((rhs & ~1) == 0); return new Bit(rhs); } public static implicit operator Bit(byte rhs) { Debug.Assert((rhs & ~1) == 0); return new Bit(rhs); } public static implicit operator Bit(bool rhs) { return new Bit(rhs ? (byte)1 : (byte)0); } public static implicit operator long(Bit rhs) { return rhs._val; } public static implicit operator int(Bit rhs) { return (int)rhs._val; } public static implicit operator uint(Bit rhs) { return rhs._val; } public static implicit operator byte(Bit rhs) { return (byte)rhs._val; } public static implicit operator bool(Bit rhs) { return rhs._val != 0; } public override string ToString() { return _val.ToString(); } public static bool operator ==(Bit lhs, Bit rhs) { return lhs._val == rhs._val; } public static bool operator !=(Bit lhs, Bit rhs) { return lhs._val != rhs._val; } public override int GetHashCode() { return _val.GetHashCode(); } public override bool Equals(object obj) { return this == (Bit)obj; // this is probably wrong } } }