Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches

◆ DoValueTypeFixup()

bool System.Runtime.Serialization.ObjectManager.DoValueTypeFixup ( FieldInfo memberToFix,
ObjectHolder holder,
object value )
inlineprivate

Definition at line 199 of file ObjectManager.cs.

200 {
201 FieldInfo[] array = new FieldInfo[4];
202 int num = 0;
203 int[] array2 = null;
204 object objectValue = holder.ObjectValue;
205 while (holder.RequiresValueTypeFixup)
206 {
207 if (num + 1 >= array.Length)
208 {
210 Array.Copy(array, array3, array.Length);
211 array = array3;
212 }
213 ValueTypeFixupInfo valueFixup = holder.ValueFixup;
214 objectValue = holder.ObjectValue;
215 if (valueFixup.ParentField != null)
216 {
217 FieldInfo parentField = valueFixup.ParentField;
218 ObjectHolder objectHolder = FindObjectHolder(valueFixup.ContainerID);
219 if (objectHolder.ObjectValue == null)
220 {
221 break;
222 }
224 if (nullableValueField != null)
225 {
227 num++;
228 }
229 array[num] = parentField;
231 num++;
232 continue;
233 }
234 holder = FindObjectHolder(valueFixup.ContainerID);
235 array2 = valueFixup.ParentIndex;
236 break;
237 }
238 if (!(holder.ObjectValue is Array) && holder.ObjectValue != null)
239 {
240 objectValue = holder.ObjectValue;
241 }
242 if (num != 0)
243 {
244 FieldInfo[] array4 = new FieldInfo[num];
245 for (int i = 0; i < num; i++)
246 {
247 FieldInfo fieldInfo = array[num - 1 - i];
248 SerializationFieldInfo serializationFieldInfo = fieldInfo as SerializationFieldInfo;
250 }
252 if (memberToFix != null)
253 {
254 memberToFix.SetValueDirect(typedReference, value);
255 }
256 else
257 {
258 TypedReference.SetTypedReference(typedReference, value);
259 }
260 }
261 else if (memberToFix != null)
262 {
263 FormatterServices.SerializationSetValue(memberToFix, objectValue, value);
264 }
265 if (array2 != null && holder.ObjectValue != null)
266 {
267 ((Array)holder.ObjectValue).SetValue(objectValue, array2);
268 }
269 return true;
270 }
static FieldInfo GetNullableValueField(Type type)
ObjectHolder FindObjectHolder(long objectID)

References System.array, System.Runtime.Serialization.Array, System.Array.Copy(), System.Runtime.Serialization.Dictionary, System.Runtime.Serialization.ObjectManager.FindObjectHolder(), System.Runtime.Serialization.ObjectManager.GetNullableValueField(), System.TypedReference.MakeTypedReference(), System.Runtime.Serialization.FormatterServices.SerializationSetValue(), System.TypedReference.SetTypedReference(), and System.value.

Referenced by System.Runtime.Serialization.ObjectManager.CompleteObject(), and System.Runtime.Serialization.ObjectManager.FixupSpecialObject().