StandardType.cs 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. namespace Island.StandardLib.Storage
  5. {
  6. /// <summary>
  7. /// 表示一个实现序列化的 32 位带符号整数
  8. /// </summary>
  9. [Serializable]
  10. public struct SInt : IStorable, IComparable<SInt>, IComparable<int>, IComparable, IEquatable<SInt>, IEquatable<int>
  11. {
  12. public int Value;
  13. public SInt(int val) => Value = val;
  14. public void ReadFromData(DataStorage data) => data.Read(out Value);
  15. public void WriteToData(DataStorage data) => data.Write(Value);
  16. public static implicit operator int(SInt val) => val.Value;
  17. public static implicit operator SInt(int Int) => new SInt(Int);
  18. public override int GetHashCode() => Value.GetHashCode();
  19. public int CompareTo(SInt other) => Value.CompareTo(other.Value);
  20. public int CompareTo(int other) => Value.CompareTo(other);
  21. public int CompareTo(object obj) => Value.CompareTo(obj);
  22. public bool Equals(SInt other) => Value.Equals(other.Value);
  23. public bool Equals(int other) => Value.Equals(other);
  24. public override string ToString() => Value.ToString();
  25. public override bool Equals(object obj) => obj is int ? (int)obj == Value : obj is SInt ? ((SInt)obj).Value == Value : false;
  26. public static bool operator ==(SInt a, SInt b) => a.Equals(b);
  27. public static bool operator !=(SInt a, SInt b) => !a.Equals(b);
  28. public static bool operator ==(SInt a, int b) => a.Equals(b);
  29. public static bool operator !=(SInt a, int b) => !a.Equals(b);
  30. public static bool operator ==(int a, SInt b) => b.Equals(a);
  31. public static bool operator !=(int a, SInt b) => !b.Equals(a);
  32. }
  33. /// <summary>
  34. /// 表示一个实现序列化的布尔(<see cref="true"/> 或 <see cref="false"/>)值
  35. /// </summary>
  36. [Serializable]
  37. public struct SBool : IStorable, IComparable, IComparable<bool>, IComparable<SBool>, IEquatable<bool>, IEquatable<SBool>
  38. {
  39. public bool Value;
  40. public SBool(bool val) => Value = val;
  41. public void ReadFromData(DataStorage data) => data.Read(out Value);
  42. public void WriteToData(DataStorage data) => data.Write(Value);
  43. public static implicit operator bool(SBool val) => val.Value;
  44. public static implicit operator SBool(bool boo) => new SBool(boo);
  45. public override int GetHashCode() => Value.GetHashCode();
  46. public int CompareTo(object obj) => Value.CompareTo(obj);
  47. public int CompareTo(bool other) => Value.CompareTo(other);
  48. public int CompareTo(SBool other) => Value.CompareTo(other.Value);
  49. public bool Equals(bool other) => Value.Equals(other);
  50. public bool Equals(SBool other) => Value.Equals(other.Value);
  51. public override string ToString() => Value.ToString();
  52. public override bool Equals(object obj) => obj is bool ? (bool)obj == Value : obj is SBool ? ((SBool)obj).Value == Value : false;
  53. public static bool operator ==(SBool a, SBool b) => a.Equals(b);
  54. public static bool operator !=(SBool a, SBool b) => !a.Equals(b);
  55. public static bool operator ==(SBool a, bool b) => a.Equals(b);
  56. public static bool operator !=(SBool a, bool b) => !a.Equals(b);
  57. public static bool operator ==(bool a, SBool b) => b.Equals(a);
  58. public static bool operator !=(bool a, SBool b) => !b.Equals(a);
  59. }
  60. /// <summary>
  61. /// 表示一个实现序列化的 UTF-16 文本单元序列
  62. /// </summary>
  63. [Serializable]
  64. public class SString : IStorable, IComparable, ICloneable, IComparable<string>, IComparable<SString>, IEnumerable<char>, IEnumerable, IEquatable<string>, IEquatable<SString>
  65. {
  66. public string Value;
  67. public SString() { Value = ""; }
  68. public SString(string val) => Value = val;
  69. public void ReadFromData(DataStorage data) => data.Read(out Value);
  70. public void WriteToData(DataStorage data) => data.Write(Value);
  71. public static implicit operator string(SString val) => val.Value;
  72. public static implicit operator SString(string str) => new SString(str);
  73. public override int GetHashCode() => Value.GetHashCode();
  74. public int CompareTo(object obj) => Value.CompareTo(obj);
  75. public object Clone() => Value.Clone();
  76. public int CompareTo(string other) => Value.CompareTo(other);
  77. public int CompareTo(SString other) => Value.CompareTo(other.Value);
  78. public IEnumerator<char> GetEnumerator() => Value.GetEnumerator();
  79. IEnumerator IEnumerable.GetEnumerator() => Value.GetEnumerator();
  80. public bool Equals(string other) => Value.Equals(other);
  81. public bool Equals(SString other) => Value.Equals(other.Value);
  82. public char this[int index] => Value[index];
  83. public override string ToString() => Value.ToString();
  84. public override bool Equals(object obj) => obj is string ? (string)obj == Value : obj is SString ? ((SString)obj).Value == Value : false;
  85. public static bool operator ==(SString a, SString b) => a.Equals(b);
  86. public static bool operator !=(SString a, SString b) => !a.Equals(b);
  87. public static bool operator ==(SString a, string b) => a.Equals(b);
  88. public static bool operator !=(SString a, string b) => !a.Equals(b);
  89. public static bool operator ==(string a, SString b) => b.Equals(a);
  90. public static bool operator !=(string a, SString b) => !b.Equals(a);
  91. public int Length => Value.Length;
  92. }
  93. }