private static void SerializeDelegate(SerializeContext context, BinaryWriter bw, Delegate d, Type delegateType) { Debug.Assert(d != null); Debug.Assert(StaticDelegateTable.delegateTypeTable.ContainsKey(delegateType)); var delegateTypeInfo = StaticDelegateTable.delegateTypeTable[delegateType]; var methodId = delegateTypeInfo.GetIdForMethod(d.Method); bw.Write(methodId); var delegateMethodInfo = delegateTypeInfo.GetMethodInfoForId(methodId); if (delegateMethodInfo.canHaveTarget) { var target = d.Target; if (context.Walk(target)) { StaticDispatchTable.SerializationDispatcher(context, bw, target); } } else { Debug.Assert(d.Target == null); } }
public static void SerializeArray3DField <T>(SerializeContext context, BinaryWriter bw, T[,,] array) { if (!context.Walk(array)) // null check { return; } context.VisitObject(array); int length0, length1, length2; bw.WriteSmallInt32(length0 = array.GetLength(0)); bw.WriteSmallInt32(length1 = array.GetLength(1)); bw.WriteSmallInt32(length2 = array.GetLength(2)); for (var i = 0; i < length0; i++) { for (var j = 0; j < length1; j++) { for (var k = 0; k < length2; k++) { Field.Serialize(context, bw, ref array[i, j, k]); } } } context.LeaveObject(); }
public static void SerializeField(SerializeContext context, BinaryWriter bw, StringBuilder stringBuilder) { if (!context.Walk(stringBuilder)) // null check { return; } context.VisitObject(stringBuilder); bw.WriteSmallInt32(stringBuilder.Length); for (var i = 0; i < stringBuilder.Length; i++) { bw.Write(stringBuilder[i]); } context.LeaveObject(); }
// NOTE: Do *not* mark these as [CustomFieldSerializer] (will get rejected anyway) // They are accessed directly by the serializer and generator (via ArrayFieldMethodProvider) public static void SerializeArrayField <T>(SerializeContext context, BinaryWriter bw, T[] array) { if (!context.Walk(array)) // null check { return; } context.VisitObject(array); bw.WriteSmallInt32(array.Length); for (var i = 0; i < array.Length; i++) { Field.Serialize(context, bw, ref array[i]); } context.LeaveObject(); }
public static void SerializeArray2DField <T>(SerializeContext context, BinaryWriter bw, T[,] array) { if (!context.Walk(array)) // null check { return; } context.VisitObject(array); int length0, length1; bw.WriteSmallInt32(length0 = array.GetLength(0)); bw.WriteSmallInt32(length1 = array.GetLength(1)); for (var i = 0; i < length0; i++) { for (var j = 0; j < length1; j++) // NOTE: Arrays are contiguious on their rightmost (last) dimension { Field.Serialize(context, bw, ref array[i, j]); } } context.LeaveObject(); }
public static void SerializeField(SerializeContext context, BinaryWriter bw, StateProvider.State value) { context.Walk(value); }