Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
            }
        }
Esempio n. 3
0
        /// <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);
 }
Esempio n. 5
0
 private BitStreamCodec(Deserializer deserializer, Serializer serializer, BitStreamTypeCode typeCode)
 {
     this.deserializer = deserializer;
     this.serializer   = serializer;
     this.typeCode     = typeCode;
 }
Esempio n. 6
0
 /// <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);
 }
Esempio n. 7
0
 /// <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);
 }