PkmnLibRSharp/PkmnLibRSharp/StaticData/LevelInt.cs

120 lines
5.2 KiB
C#

using System;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using BackingLevelInt = System.Byte;
// ReSharper disable BuiltInTypeReferenceStyle
namespace PkmnLibSharp.StaticData
{
[StructLayout(LayoutKind.Explicit)]
public struct LevelInt : IComparable, IComparable<BackingLevelInt>, IComparable<LevelInt>, IConvertible,
IEquatable<BackingLevelInt>, IEquatable<LevelInt>, IEquatable<int>, IFormattable
{
[FieldOffset(0)] private BackingLevelInt _value;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static implicit operator BackingLevelInt(LevelInt l)
{
return l._value;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static implicit operator LevelInt(BackingLevelInt b)
{
return new LevelInt { _value = b };
}
public int CompareTo(object obj)
{
if (obj is LevelInt l)
return _value.CompareTo(l._value);
return _value.CompareTo(obj);
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int CompareTo(BackingLevelInt other) => _value.CompareTo(other);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int CompareTo(LevelInt other) => _value.CompareTo(other._value);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public TypeCode GetTypeCode() => Type.GetTypeCode(typeof(BackingLevelInt));
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool ToBoolean(IFormatProvider provider) => ((IConvertible)_value).ToBoolean(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public byte ToByte(IFormatProvider provider) => ((IConvertible)_value).ToByte(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public char ToChar(IFormatProvider provider) => ((IConvertible)_value).ToChar(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public DateTime ToDateTime(IFormatProvider provider) => ((IConvertible)_value).ToDateTime(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public decimal ToDecimal(IFormatProvider provider) => ((IConvertible)_value).ToDecimal(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public double ToDouble(IFormatProvider provider) => ((IConvertible)_value).ToDouble(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public short ToInt16(IFormatProvider provider) => ((IConvertible)_value).ToInt16(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public int ToInt32(IFormatProvider provider) => ((IConvertible)_value).ToInt32(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public long ToInt64(IFormatProvider provider) => ((IConvertible)_value).ToInt64(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public sbyte ToSByte(IFormatProvider provider) => ((IConvertible)_value).ToSByte(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public float ToSingle(IFormatProvider provider) => ((IConvertible)_value).ToSingle(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public string ToString(IFormatProvider provider) => _value.ToString(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public object ToType(Type conversionType, IFormatProvider provider) =>
((IConvertible)_value).ToType(conversionType, provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ushort ToUInt16(IFormatProvider provider) => ((IConvertible)_value).ToUInt16(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public uint ToUInt32(IFormatProvider provider) => ((IConvertible)_value).ToUInt32(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public ulong ToUInt64(IFormatProvider provider) => ((IConvertible)_value).ToUInt64(provider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool Equals(BackingLevelInt other) => _value == other;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public string ToString(string format, IFormatProvider formatProvider) =>
_value.ToString(format, formatProvider);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool Equals(LevelInt other) => _value == other._value;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public bool Equals(int other) => _value == other;
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override bool Equals(object? obj) => obj is LevelInt other && Equals(other);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override int GetHashCode()
{
return _value.GetHashCode();
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator ==(LevelInt left, LevelInt right) => left.Equals(right);
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static bool operator !=(LevelInt left, LevelInt right) => !left.Equals(right);
}
}