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); } } }
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); } } }
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); }
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); }
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); }
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); }
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); }
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; } }