Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
ReadObjectInfo.cs
Go to the documentation of this file.
5
7
8internal sealed class ReadObjectInfo
9{
10 internal int _objectInfoId;
11
12 internal static int _readObjectInfoCounter;
13
15 internal Type _objectType;
16
18
19 internal int _count;
20
21 internal bool _isSi;
22
23 internal bool _isTyped;
24
25 internal bool _isSimpleAssembly;
26
28
29 internal string[] _wireMemberNames;
30
32
33 private int _lastPosition;
34
36
38
40
42
44
45 internal ReadObjectInfo()
46 {
47 }
48
49 internal void ObjectEnd()
50 {
51 }
52
53 internal void PrepareForReuse()
54 {
55 _lastPosition = 0;
56 }
57
64
75
82
102
104 {
105 BinaryFormatterEventSource.Log.DeserializingObject(objectType);
106 if (objectType.IsArray)
107 {
109 return;
110 }
111 ISurrogateSelector selector = null;
112 if (surrogateSelector != null)
113 {
114 _serializationSurrogate = surrogateSelector.GetSurrogate(objectType, context, out selector);
115 }
116 if (_serializationSurrogate != null)
117 {
118 _isSi = true;
119 }
120 else if ((object)objectType != Converter.s_typeofObject && Converter.s_typeofISerializable.IsAssignableFrom(objectType))
121 {
122 _isSi = true;
123 }
124 if (_isSi)
125 {
126 InitSiRead();
127 }
128 else
129 {
131 }
132 }
133
134 private void InitSiRead()
135 {
136 if (_memberTypesList != null)
137 {
139 }
140 }
141
142 private void InitNoMembers()
143 {
145 }
146
161
162 internal MemberInfo GetMemberInfo(string name)
163 {
164 if (_cache == null)
165 {
166 return null;
167 }
168 if (_isSi)
169 {
171 }
172 if (_cache._memberInfos == null)
173 {
175 }
176 int num = Position(name);
177 if (num == -1)
178 {
179 return null;
180 }
181 return _cache._memberInfos[num];
182 }
183
184 internal Type GetType(string name)
185 {
186 int num = Position(name);
187 if (num == -1)
188 {
189 return null;
190 }
192 if (type == null)
193 {
195 }
196 return type;
197 }
198
199 internal void AddValue(string name, object value, ref SerializationInfo si, ref object[] memberData)
200 {
201 if (_isSi)
202 {
203 si.AddValue(name, value);
204 return;
205 }
206 int num = Position(name);
207 if (num != -1)
208 {
209 memberData[num] = value;
210 }
211 }
212
214 {
215 if (_isSi)
216 {
217 if (si == null)
218 {
220 }
221 }
222 else if (memberData == null && _cache != null)
223 {
224 memberData = new object[_cache._memberNames.Length];
225 }
226 }
227
228 internal void RecordFixup(long objectId, string name, long idRef)
229 {
230 if (_isSi)
231 {
232 if (_objectManager == null)
233 {
235 }
237 return;
238 }
239 int num = Position(name);
240 if (num != -1)
241 {
242 if (_objectManager == null)
243 {
245 }
247 }
248 }
249
250 internal void PopulateObjectMembers(object obj, object[] memberData)
251 {
252 if (!_isSi && memberData != null)
253 {
255 }
256 }
257
258 private int Position(string name)
259 {
260 if (_cache == null)
261 {
262 return -1;
263 }
264 if (_cache._memberNames.Length != 0 && _cache._memberNames[_lastPosition].Equals(name))
265 {
266 return _lastPosition;
267 }
268 if (++_lastPosition < _cache._memberNames.Length && _cache._memberNames[_lastPosition].Equals(name))
269 {
270 return _lastPosition;
271 }
272 for (int i = 0; i < _cache._memberNames.Length; i++)
273 {
274 if (_cache._memberNames[i].Equals(name))
275 {
276 _lastPosition = i;
277 return _lastPosition;
278 }
279 }
280 _lastPosition = 0;
281 return -1;
282 }
283
285 {
286 if (_isSi)
287 {
289 }
290 if (_cache == null)
291 {
292 return null;
293 }
294 if (_cache._memberTypes == null)
295 {
297 for (int i = 0; i < _count; i++)
298 {
300 }
301 }
302 bool flag = false;
303 if (inMemberNames.Length < _cache._memberInfos.Length)
304 {
305 flag = true;
306 }
307 Type[] array = new Type[_cache._memberInfos.Length];
308 bool flag2 = false;
309 for (int j = 0; j < _cache._memberInfos.Length; j++)
310 {
311 if (!flag && inMemberNames[j].Equals(_cache._memberInfos[j].Name))
312 {
314 continue;
315 }
316 flag2 = false;
317 for (int k = 0; k < inMemberNames.Length; k++)
318 {
319 if (_cache._memberInfos[j].Name.Equals(inMemberNames[k]))
320 {
322 flag2 = true;
323 break;
324 }
325 }
326 if (!flag2 && !_isSimpleAssembly && _cache._memberInfos[j].GetCustomAttribute(typeof(OptionalFieldAttribute), inherit: false) == null)
327 {
329 }
330 }
331 return array;
332 }
333
335 {
337 {
338 return ((FieldInfo)objMember).FieldType;
339 }
341 }
342
349}
static object PopulateObjectMembers(object obj, MemberInfo[] members, object?[] data)
static MemberInfo[] GetSerializableMembers([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type type)
void RecordFixup(long objectId, string name, long idRef)
void Init([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type objectType, string[] memberNames, Type[] memberTypes, ISurrogateSelector surrogateSelector, StreamingContext context, ObjectManager objectManager, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, bool bSimpleAssembly)
void PopulateObjectMembers(object obj, object[] memberData)
void AddValue(string name, object value, ref SerializationInfo si, ref object[] memberData)
void Init([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, ObjectManager objectManager, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, bool bSimpleAssembly)
void InitDataStore(ref SerializationInfo si, ref object[] memberData)
Type[] GetMemberTypes(string[] inMemberNames, Type objectType)
static ReadObjectInfo Create([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context, ObjectManager objectManager, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, bool bSimpleAssembly)
static ReadObjectInfo Create([DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] Type objectType, string[] memberNames, Type[] memberTypes, ISurrogateSelector surrogateSelector, StreamingContext context, ObjectManager objectManager, SerObjectInfoInit serObjectInfoInit, IFormatterConverter converter, bool bSimpleAssembly)
static ReadObjectInfo GetObjectInfo(SerObjectInfoInit serObjectInfoInit)
void InitReadConstructor(Type objectType, ISurrogateSelector surrogateSelector, StreamingContext context)
virtual void RecordDelayedFixup(long objectToBeFixed, string memberName, long objectRequired)
virtual void RecordFixup(long objectToBeFixed, MemberInfo member, long objectRequired)
static string Serialization_SerMemberInfo
Definition SR.cs:118
static string Serialization_NoMemberInfo
Definition SR.cs:132
static string Serialization_MemberInfo
Definition SR.cs:126
static string Format(string resourceFormat, object p1)
Definition SR.cs:118
static string Serialization_ISerializableTypes
Definition SR.cs:128
static string Serialization_CorruptedStream
Definition SR.cs:74
static string Serialization_MissingMember
Definition SR.cs:130
Definition SR.cs:7
static int Increment(ref int location)
override string ToString()
Definition Type.cs:1108