/// <summary> /// Add codec for specified type, including support for null values /// </summary> /// <parameter name="typeCode">Type code, used to provide type-safe serialization as described in the "Serialization and data types" chapter in the manual</parameter> public static void AddAndMakeNullable <T>(Deserializer deserializer, Serializer serializer, BitStreamTypeCode typeCode, bool replaceIfExists) where T : struct { Add <T>(deserializer, serializer, typeCode, replaceIfExists); BitStreamTypeCode nullableTypeCode = (typeCode == BitStreamTypeCode.Undefined || typeCode == BitStreamTypeCode.MaxValue) ? BitStreamTypeCode.Undefined : typeCode + 1; Add(typeof(T?).TypeHandle, delegate(BitStream stream, object[] args) { return(_ReadNullable <T>(deserializer, stream, args)); }, delegate(BitStream stream, object value, object[] args) { _WriteNullable(serializer, stream, (T?)value, args); }, nullableTypeCode, replaceIfExists); }
/// <summary> /// Add codec for specified type, including support for arrays. /// </summary> /// <parameter name="typeCode">Type code, used to provide type-safe serialization as described in the "Serialization and data types" chapter in the manual</parameter> public static void AddAndMakeArray <T>(Deserializer deserializer, Serializer serializer, BitStreamTypeCode typeCode, bool replaceIfExists) { Add <T>(deserializer, serializer, typeCode, replaceIfExists); if (!typeof(T).IsArray) { BitStreamTypeCode arrayTypeCode = (typeCode == BitStreamTypeCode.Undefined || typeCode >= BitStreamTypeCode.ArrayType1) ? BitStreamTypeCode.Undefined : typeCode + (int)BitStreamTypeCode.ArrayType1; Add(typeof(T).MakeArrayType().TypeHandle, delegate(BitStream stream, object[] args) { return(_ReadArray <T>(deserializer, stream, args)); }, delegate(BitStream stream, object value, object[] args) { _WriteArray(serializer, stream, (T[])value, args); }, arrayTypeCode, replaceIfExists); } }
/// <summary> /// Add codec for specified type, including support for null values and arrays /// </summary> /// <parameter name="typeCode">Type code, used to provide type-safe serialization as described in the "Serialization and data types" chapter in the manual</parameter> public static void AddAndMakeNullableAndArray <T>(Deserializer deserializer, Serializer serializer, BitStreamTypeCode typeCode, bool replaceIfExists) where T : struct { AddAndMakeArray <T>(deserializer, serializer, typeCode, replaceIfExists); BitStreamTypeCode nullableTypeCode = (typeCode == BitStreamTypeCode.Undefined || typeCode == BitStreamTypeCode.MaxValue) ? BitStreamTypeCode.Undefined : typeCode + 1; Add(typeof(T?).TypeHandle, delegate(BitStream stream, object[] args) { return(_ReadNullable <T>(deserializer, stream, args)); }, delegate(BitStream stream, object value, object[] args) { _WriteNullable(serializer, stream, (T?)value, args); }, nullableTypeCode, replaceIfExists); if (!typeof(T?).IsArray) { BitStreamTypeCode arrayTypeCode = (typeCode == BitStreamTypeCode.Undefined || nullableTypeCode >= BitStreamTypeCode.ArrayType1) ? BitStreamTypeCode.Undefined : nullableTypeCode + (int)BitStreamTypeCode.ArrayType1; Add(typeof(T?).MakeArrayType().TypeHandle, delegate(BitStream stream, object[] args) { return(_ReadArray <T?>(deserializer, stream, args)); }, delegate(BitStream stream, object value, object[] args) { _WriteArray(serializer, stream, (T?[])value, args); }, arrayTypeCode, replaceIfExists); } }
public static void RegisterCodec <T>(BitStreamTypeCode typeCode, BitStreamCodec.SerializerHandler serializer, BitStreamCodec.DeserializerHandler deserializer) { BitStreamCodec.RegisterCodec <T>((byte)typeCode, serializer, deserializer); }
private BitStreamCodec(Deserializer deserializer, Serializer serializer, BitStreamTypeCode typeCode) { this.deserializer = deserializer; this.serializer = serializer; this.typeCode = typeCode; }
/// <summary> /// Add codec for specified type /// </summary> /// <parameter name="typeCode">Type code, used to provide type-safe serialization as described in the "Serialization and data types" chapter in the manual</parameter> public static void Add(RuntimeTypeHandle typeHandle, Deserializer deserializer, Serializer serializer, BitStreamTypeCode typeCode, bool replaceIfExists) { Add(typeHandle, new BitStreamCodec(deserializer, serializer, typeCode), replaceIfExists); }
/// <summary> /// Adds a serialization codec for the specified user-defined type. /// </summary> /// <parameter name="T">The type that should be serialized using this codec.</parameter> /// <parameter name="deserializer">The deserializer function. Based on the uLink.BitStreamCodec.Deserializer delegate.</parameter> /// <parameter name="serializer">The serializer function. Based on the uLink.BitStreamCodec.Serializer delegate.</parameter> /// <parameter name="typeCode">Type code, used to provide type-safe serialization as described in the "Serialization and data types" chapter in the manual</parameter> public static void Add <T>(Deserializer deserializer, Serializer serializer, BitStreamTypeCode typeCode, bool replaceIfExists) { Add(typeof(T).TypeHandle, deserializer, serializer, typeCode, replaceIfExists); }