Example #1
0
        public static void Write(this BinaryWriter writer, IList value, BinaryUtility.TypeCodes elementTypeCode)
        {
            if (elementTypeCode == BinaryUtility.TypeCodes.Other || BinaryUtility.IsGenericTypeCode(elementTypeCode))
            {
                writer.Write(value.GetType().GetGenericArguments()[0]);
            }

            if (elementTypeCode == BinaryUtility.TypeCodes.Other || BinaryUtility.IsReferenceTypeCode(elementTypeCode))
            {
                writer.Write(value.Count);

                for (int i = 0; i < value.Count; i++)
                {
                    writer.Write(value[i]);
                }
            }
            else
            {
                writer.Write(value.Count);

                for (int i = 0; i < value.Count; i++)
                {
                    writer.Write(value[i], elementTypeCode);
                }
            }
        }
Example #2
0
        public static void Write(this BinaryWriter writer, Array value, BinaryUtility.TypeCodes elementTypeCode)
        {
            if (elementTypeCode == BinaryUtility.TypeCodes.Other || BinaryUtility.IsGenericTypeCode(elementTypeCode))
            {
                writer.Write(value.GetType().GetElementType());
            }

            if (BinaryUtility.IsReferenceTypeCode(elementTypeCode))
            {
                writer.Write(value.Length);

                for (int i = 0; i < value.Length; i++)
                {
                    writer.Write(value.GetValue(i));
                }
            }
            else
            {
                writer.Write(value.Length);

                for (int i = 0; i < value.Length; i++)
                {
                    writer.Write(value.GetValue(i), elementTypeCode);
                }
            }
        }
Example #3
0
        static List <T> ReadObjectList <T>(this BinaryReader reader, BinaryUtility.TypeCodes elementTypeCode)
        {
            int count = reader.ReadInt32();
            var list  = new List <T>(count);

            for (int i = 0; i < count; i++)
            {
                list.Add((T)reader.ReadObject(elementTypeCode));
            }

            return(list);
        }
Example #4
0
        static T[] ReadObjectArray <T>(this BinaryReader reader, BinaryUtility.TypeCodes elementTypeCode)
        {
            int length = reader.ReadInt32();
            var array  = new T[length];

            for (int i = 0; i < length; i++)
            {
                array[i] = (T)reader.ReadObject(elementTypeCode);
            }

            return(array);
        }
Example #5
0
        static IList ReadObjectList(this BinaryReader reader, BinaryUtility.TypeCodes elementTypeCode)
        {
            Type elementType = BinaryUtility.ToType(elementTypeCode) ?? reader.ReadType();
            int  count       = reader.ReadInt32();
            var  list        = (IList)Activator.CreateInstance(typeof(List <>).MakeGenericType(elementType), count);

            for (int i = 0; i < count; i++)
            {
                list.Add(reader.ReadObject());
            }

            return(list);
        }
Example #6
0
        static Array ReadObjectArray(this BinaryReader reader, BinaryUtility.TypeCodes elementTypeCode)
        {
            Type elementType = BinaryUtility.ToType(elementTypeCode) ?? reader.ReadType();
            int  length      = reader.ReadInt32();
            var  array       = Array.CreateInstance(elementType, length);

            for (int i = 0; i < length; i++)
            {
                array.SetValue(reader.ReadObject(), i);
            }

            return(array);
        }
Example #7
0
        public static object ReadObject(this BinaryReader reader, BinaryUtility.TypeCodes typeCode)
        {
            object value = null;

            switch (typeCode)
            {
            case BinaryUtility.TypeCodes.Other:
                value = reader.ReadOther();
                break;

            case BinaryUtility.TypeCodes.Bool:
                value = reader.ReadBoolean();
                break;

            case BinaryUtility.TypeCodes.SByte:
                value = reader.ReadSByte();
                break;

            case BinaryUtility.TypeCodes.Byte:
                value = reader.ReadByte();
                break;

            case BinaryUtility.TypeCodes.Int16:
                value = reader.ReadInt16();
                break;

            case BinaryUtility.TypeCodes.UInt16:
                value = reader.ReadUInt16();
                break;

            case BinaryUtility.TypeCodes.Int32:
                value = reader.ReadInt32();
                break;

            case BinaryUtility.TypeCodes.UInt32:
                value = reader.ReadUInt32();
                break;

            case BinaryUtility.TypeCodes.Int64:
                value = reader.ReadInt64();
                break;

            case BinaryUtility.TypeCodes.UInt64:
                value = reader.ReadUInt64();
                break;

            case BinaryUtility.TypeCodes.Single:
                value = reader.ReadSingle();
                break;

            case BinaryUtility.TypeCodes.Double:
                value = reader.ReadDouble();
                break;

            case BinaryUtility.TypeCodes.Decimal:
                value = reader.ReadDecimal();
                break;

            case BinaryUtility.TypeCodes.Char:
                value = reader.ReadChar();
                break;

            case BinaryUtility.TypeCodes.String:
                value = reader.ReadString();
                break;

            case BinaryUtility.TypeCodes.Type:
                value = reader.ReadType();
                break;

            case BinaryUtility.TypeCodes.Vector2:
                value = reader.ReadVector2();
                break;

            case BinaryUtility.TypeCodes.Vector3:
                value = reader.ReadVector3();
                break;

            case BinaryUtility.TypeCodes.Vector4:
                value = reader.ReadVector4();
                break;

            case BinaryUtility.TypeCodes.Color:
                value = reader.ReadColor();
                break;

            case BinaryUtility.TypeCodes.Quaternion:
                value = reader.ReadQuaternion();
                break;

            case BinaryUtility.TypeCodes.Rect:
                value = reader.ReadRect();
                break;

            case BinaryUtility.TypeCodes.Bounds:
                value = reader.ReadBounds();
                break;

            case BinaryUtility.TypeCodes.AnimationCurve:
                value = reader.ReadAnimationCurve();
                break;

            case BinaryUtility.TypeCodes.Keyframe:
                value = reader.ReadKeyframe();
                break;

            case BinaryUtility.TypeCodes.Array:
                value = reader.ReadArray();
                break;

            case BinaryUtility.TypeCodes.List:
                value = reader.ReadList();
                break;
            }

            return(value);
        }
Example #8
0
        public static void Write(this BinaryWriter writer, object value, BinaryUtility.TypeCodes typeCode)
        {
            switch (typeCode)
            {
            case BinaryUtility.TypeCodes.Other:
                writer.WriteOther(value);
                break;

            case BinaryUtility.TypeCodes.Bool:
                writer.Write((bool)value);
                break;

            case BinaryUtility.TypeCodes.SByte:
                writer.Write((sbyte)value);
                break;

            case BinaryUtility.TypeCodes.Byte:
                writer.Write((byte)value);
                break;

            case BinaryUtility.TypeCodes.Int16:
                writer.Write((short)value);
                break;

            case BinaryUtility.TypeCodes.UInt16:
                writer.Write((ushort)value);
                break;

            case BinaryUtility.TypeCodes.Int32:
                writer.Write((int)value);
                break;

            case BinaryUtility.TypeCodes.UInt32:
                writer.Write((uint)value);
                break;

            case BinaryUtility.TypeCodes.Int64:
                writer.Write((long)value);
                break;

            case BinaryUtility.TypeCodes.UInt64:
                writer.Write((ulong)value);
                break;

            case BinaryUtility.TypeCodes.Single:
                writer.Write((float)value);
                break;

            case BinaryUtility.TypeCodes.Double:
                writer.Write((double)value);
                break;

            case BinaryUtility.TypeCodes.Decimal:
                writer.Write((decimal)value);
                break;

            case BinaryUtility.TypeCodes.Char:
                writer.Write((char)value);
                break;

            case BinaryUtility.TypeCodes.String:
                writer.Write((string)value);
                break;

            case BinaryUtility.TypeCodes.Type:
                writer.Write((Type)value);
                break;

            case BinaryUtility.TypeCodes.Vector2:
                writer.Write((Vector2)value);
                break;

            case BinaryUtility.TypeCodes.Vector3:
                writer.Write((Vector3)value);
                break;

            case BinaryUtility.TypeCodes.Vector4:
                writer.Write((Vector4)value);
                break;

            case BinaryUtility.TypeCodes.Color:
                writer.Write((Color)value);
                break;

            case BinaryUtility.TypeCodes.Quaternion:
                writer.Write((Quaternion)value);
                break;

            case BinaryUtility.TypeCodes.Rect:
                writer.Write((Rect)value);
                break;

            case BinaryUtility.TypeCodes.Bounds:
                writer.Write((Bounds)value);
                break;

            case BinaryUtility.TypeCodes.AnimationCurve:
                writer.Write((AnimationCurve)value);
                break;

            case BinaryUtility.TypeCodes.Keyframe:
                writer.Write((Keyframe)value);
                break;

            case BinaryUtility.TypeCodes.Array:
                writer.Write((Array)value);
                break;

            case BinaryUtility.TypeCodes.List:
                writer.Write((IList)value);
                break;
            }
        }