Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
BinaryInputArchive.cs
浏览该文件的文档.
1namespace Engine.Serialization {
2 public class BinaryInputArchive : InputArchive, IDisposable {
3 Dictionary<int, string> m_stringIds = [];
4
6
7 public bool Use7BitInts = true;
8
9 public Stream Stream => m_reader.BaseStream;
10
11 public BinaryInputArchive(Stream stream, int version = 0, object context = null) : base(version, context) =>
12 m_reader = new EngineBinaryReader(stream);
13
14 public void Reset(Stream stream, int version = 0, object context = null) {
15 m_reader = new EngineBinaryReader(stream);
16 m_stringIds.Clear();
17 Reset(version, context);
18 }
19
20 public override void Dispose() {
21 Utilities.Dispose(ref m_reader);
22 }
23
24 public override void Serialize(string name, ref sbyte value) {
25 value = m_reader.ReadSByte();
26 }
27
28 public override void Serialize(string name, ref byte value) {
29 value = m_reader.ReadByte();
30 }
31
32 public override void Serialize(string name, ref short value) {
33 value = m_reader.ReadInt16();
34 }
35
36 public override void Serialize(string name, ref ushort value) {
37 value = m_reader.ReadUInt16();
38 }
39
40 public override void Serialize(string name, ref int value) {
41 value = Use7BitInts ? m_reader.Read7BitEncodedInt() : m_reader.ReadInt32();
42 }
43
44 public override void Serialize(string name, ref uint value) {
45 value = m_reader.ReadUInt32();
46 }
47
48 public override void Serialize(string name, ref long value) {
49 value = m_reader.ReadInt64();
50 }
51
52 public override void Serialize(string name, ref ulong value) {
53 value = m_reader.ReadUInt64();
54 }
55
56 public override void Serialize(string name, ref float value) {
57 value = m_reader.ReadSingle();
58 }
59
60 public override void Serialize(string name, ref double value) {
61 value = m_reader.ReadDouble();
62 }
63
64 public override void Serialize(string name, ref bool value) {
65 value = m_reader.ReadBoolean();
66 }
67
68 public override void Serialize(string name, ref char value) {
69 value = m_reader.ReadChar();
70 }
71
72 public override void Serialize(string name, ref string value) {
73 int num = m_reader.Read7BitEncodedInt();
74 if (num == 0) {
75 value = null;
76 }
77 else if (!m_stringIds.TryGetValue(num, out string value2)) {
78 value = m_reader.ReadString();
79 m_stringIds.Add(num, value);
80 }
81 else {
82 value = value2;
83 }
84 }
85
86 public override void Serialize(string name, ref byte[] value) {
87 value = new byte[m_reader.Read7BitEncodedInt()];
88 if (m_reader.Read(value, 0, value.Length) != value.Length) {
89 throw new InvalidOperationException();
90 }
91 }
92
93 public override void Serialize(string name, int length, ref byte[] value) {
94 value = new byte[length];
95 if (m_reader.Read(value, 0, value.Length) != length) {
96 throw new InvalidOperationException();
97 }
98 }
99
100 public override void SerializeCollection<T>(string name, ICollection<T> collection) {
101 SerializeData serializeData = GetSerializeData(typeof(T), true);
102 using IEnumerator<T> enumerator = collection.Count > 0 ? collection.GetEnumerator() : null;
103 int value = 0;
104 Serialize(null, ref value);
105 bool flag = true;
106 for (int i = 0; i < value; i++) {
107 if (flag
108 && enumerator != null
109 && enumerator.MoveNext()) {
110 T value2 = enumerator.Current;
111 ReadObject(null, serializeData, ref value2, false);
112 continue;
113 }
114 T value3 = default;
115 ReadObject(null, serializeData, ref value3, true);
116 collection.Add(value3);
117 flag = false;
118 }
119 }
120
121 public override void SerializeDictionary<K, V>(string name, IDictionary<K, V> dictionary) {
122 SerializeData serializeData = GetSerializeData(typeof(K), true);
123 SerializeData serializeData2 = GetSerializeData(typeof(V), true);
124 int value = 0;
125 Serialize(null, ref value);
126 for (int i = 0; i < value; i++) {
127 object value2 = null;
128 object value3 = null;
129 ReadObject(null, serializeData, ref value2, true);
130 if (dictionary.TryGetValue((K)value2, out V value4)) {
131 value3 = value4;
132 ReadObject(null, serializeData2, ref value3, false);
133 }
134 else {
135 ReadObject(null, serializeData2, ref value3, true);
136 dictionary.Add((K)value2, (V)value3);
137 }
138 }
139 }
140
141 public override void ReadObjectInfo(out int? objectId, out bool isReference, out Type runtimeType) {
142 int value = 0;
143 Serialize(null, ref value);
144 isReference = (value & 1) == 0;
145 bool flag = (value & 2) != 0;
146 if ((value & 4) != 0) {
147 string value2 = null;
148 Serialize(null, ref value2);
149 runtimeType = TypeCache.FindType(value2, false, true);
150 }
151 else {
152 runtimeType = null;
153 }
154 objectId = flag ? new int?(value >> 4) : null;
155 }
156 }
157}
static SerializeData GetSerializeData(Type type, bool allowEmptySerializer)
override void SerializeDictionary< K, V >(string name, IDictionary< K, V > dictionary)
override void Serialize(string name, ref char value)
override void Serialize(string name, ref ushort value)
override void Serialize(string name, ref int value)
override void Serialize(string name, ref long value)
override void Serialize(string name, ref byte value)
override void Serialize(string name, ref short value)
override void SerializeCollection< T >(string name, ICollection< T > collection)
override void Serialize(string name, ref uint value)
BinaryInputArchive(Stream stream, int version=0, object context=null) void Reset(Stream stream, int version=0, object context=null)
override void Serialize(string name, ref sbyte value)
override void Serialize(string name, ref double value)
override void Serialize(string name, ref bool value)
override void Serialize(string name, int length, ref byte[] value)
override void ReadObjectInfo(out int? objectId, out bool isReference, out Type runtimeType)
override void Serialize(string name, ref string value)
override void Serialize(string name, ref ulong value)
override void Serialize(string name, ref byte[] value)
override void Serialize(string name, ref float value)
virtual void ReadObject(string name, SerializeData staticSerializeData, ref object value, bool allowOverwriteOfExistingObject)
InputArchive(int version, object context)
static Type FindType(string typeName, bool skipSystemAssemblies, bool throwIfNotFound)