public NestedType(NestedTypeWriter writeDelegate, NestedTypeReader readDelegate, NestedTypeWriter arrayWriter, NestedTypeReader arrayReader) { WriteDelegate = writeDelegate; ReadDelegate = readDelegate; ArrayWriter = arrayWriter; ArrayReader = arrayReader; }
public NestedType(NestedTypeWriter writeDelegate, NestedTypeReader readDelegate) { WriteDelegate = writeDelegate; ReadDelegate = readDelegate; }
private bool RegisterNestedTypeInternal <T>(Func <T> constructor) where T : INetSerializable { Type t = typeof(T); if (_registeredNestedTypes.ContainsKey(t)) { return(false); } NestedType nestedType; NestedTypeWriter nestedTypeWriter = (writer, obj) => ((T)obj).Serialize(writer); NestedTypeWriter nestedTypeArrayWriter = (writer, arr) => { T[] typedArr = (T[])arr; writer.Put((ushort)typedArr.Length); for (int i = 0; i < typedArr.Length; i++) { typedArr[i].Serialize(writer); } }; //struct if (constructor == null) { nestedType = new NestedType( nestedTypeWriter, reader => { T instance = default(T); instance.Deserialize(reader); return(instance); }, nestedTypeArrayWriter, reader => { T[] typedArr = new T[reader.GetUShort()]; for (int i = 0; i < typedArr.Length; i++) { typedArr[i].Deserialize(reader); } return(typedArr); }); } else //class { nestedType = new NestedType( nestedTypeWriter, reader => { T instance = constructor(); instance.Deserialize(reader); return(instance); }, nestedTypeArrayWriter, reader => { T[] typedArr = new T[reader.GetUShort()]; for (int i = 0; i < typedArr.Length; i++) { typedArr[i] = constructor(); typedArr[i].Deserialize(reader); } return(typedArr); }); } _registeredNestedTypes.Add(t, nestedType); return(true); }