using System;
using System.Collections;
using System.Collections.Generic;
namespace Island.StandardLib.Storage
{
///
/// 表示一个实现序列化的 32 位带符号整数
///
[Serializable]
public struct SInt : IStorable, IComparable, IComparable, IComparable, IEquatable, IEquatable
{
public int Value;
public SInt(int val) => Value = val;
public void ReadFromData(DataStorage data) => data.Read(out Value);
public void WriteToData(DataStorage data) => data.Write(Value);
public static implicit operator int(SInt val) => val.Value;
public static implicit operator SInt(int Int) => new SInt(Int);
public override int GetHashCode() => Value.GetHashCode();
public int CompareTo(SInt other) => Value.CompareTo(other.Value);
public int CompareTo(int other) => Value.CompareTo(other);
public int CompareTo(object obj) => Value.CompareTo(obj);
public bool Equals(SInt other) => Value.Equals(other.Value);
public bool Equals(int other) => Value.Equals(other);
public override string ToString() => Value.ToString();
public override bool Equals(object obj) => obj is int ? (int)obj == Value : obj is SInt ? ((SInt)obj).Value == Value : false;
public static bool operator ==(SInt a, SInt b) => a.Equals(b);
public static bool operator !=(SInt a, SInt b) => !a.Equals(b);
public static bool operator ==(SInt a, int b) => a.Equals(b);
public static bool operator !=(SInt a, int b) => !a.Equals(b);
public static bool operator ==(int a, SInt b) => b.Equals(a);
public static bool operator !=(int a, SInt b) => !b.Equals(a);
}
///
/// 表示一个实现序列化的布尔( 或 )值
///
[Serializable]
public struct SBool : IStorable, IComparable, IComparable, IComparable, IEquatable, IEquatable
{
public bool Value;
public SBool(bool val) => Value = val;
public void ReadFromData(DataStorage data) => data.Read(out Value);
public void WriteToData(DataStorage data) => data.Write(Value);
public static implicit operator bool(SBool val) => val.Value;
public static implicit operator SBool(bool boo) => new SBool(boo);
public override int GetHashCode() => Value.GetHashCode();
public int CompareTo(object obj) => Value.CompareTo(obj);
public int CompareTo(bool other) => Value.CompareTo(other);
public int CompareTo(SBool other) => Value.CompareTo(other.Value);
public bool Equals(bool other) => Value.Equals(other);
public bool Equals(SBool other) => Value.Equals(other.Value);
public override string ToString() => Value.ToString();
public override bool Equals(object obj) => obj is bool ? (bool)obj == Value : obj is SBool ? ((SBool)obj).Value == Value : false;
public static bool operator ==(SBool a, SBool b) => a.Equals(b);
public static bool operator !=(SBool a, SBool b) => !a.Equals(b);
public static bool operator ==(SBool a, bool b) => a.Equals(b);
public static bool operator !=(SBool a, bool b) => !a.Equals(b);
public static bool operator ==(bool a, SBool b) => b.Equals(a);
public static bool operator !=(bool a, SBool b) => !b.Equals(a);
}
///
/// 表示一个实现序列化的 UTF-16 文本单元序列
///
[Serializable]
public class SString : IStorable, IComparable, ICloneable, IComparable, IComparable, IEnumerable, IEnumerable, IEquatable, IEquatable
{
public string Value;
public SString() { Value = ""; }
public SString(string val) => Value = val;
public void ReadFromData(DataStorage data) => data.Read(out Value);
public void WriteToData(DataStorage data) => data.Write(Value);
public static implicit operator string(SString val) => val.Value;
public static implicit operator SString(string str) => new SString(str);
public override int GetHashCode() => Value.GetHashCode();
public int CompareTo(object obj) => Value.CompareTo(obj);
public object Clone() => Value.Clone();
public int CompareTo(string other) => Value.CompareTo(other);
public int CompareTo(SString other) => Value.CompareTo(other.Value);
public IEnumerator GetEnumerator() => Value.GetEnumerator();
IEnumerator IEnumerable.GetEnumerator() => Value.GetEnumerator();
public bool Equals(string other) => Value.Equals(other);
public bool Equals(SString other) => Value.Equals(other.Value);
public char this[int index] => Value[index];
public override string ToString() => Value.ToString();
public override bool Equals(object obj) => obj is string ? (string)obj == Value : obj is SString ? ((SString)obj).Value == Value : false;
public static bool operator ==(SString a, SString b) => a.Equals(b);
public static bool operator !=(SString a, SString b) => !a.Equals(b);
public static bool operator ==(SString a, string b) => a.Equals(b);
public static bool operator !=(SString a, string b) => !a.Equals(b);
public static bool operator ==(string a, SString b) => b.Equals(a);
public static bool operator !=(string a, SString b) => !b.Equals(a);
public int Length => Value.Length;
}
}