protected long BLen <T>(T[] arr) where T : struct { Type eType = arr.GetType().GetElementType(); if ((eType == typeof(byte)) || (eType == typeof(sbyte))) { return(arr.Length); } else { return(arr.Length * ParserUtils.GetPrimitiveSize(eType)); } }
protected T[] FixBPA <T>(DataReader reader, int length, bool littleEndian) where T : struct { if (length == 0) { return(new T[0]); } if ((typeof(T) == typeof(byte[])) || (typeof(T) == typeof(sbyte[]))) { return((T[])(object)reader.ReadBytes(length)); } else { int primSize = ParserUtils.GetPrimitiveSize(typeof(T)); if (primSize > 0) { int elementCount = length / primSize; T[] ret = new T[elementCount]; for (int i = 0; i < elementCount; ++i) { ret[i] = reader.ReadPrimitive <T>(littleEndian); } return(ret); } else { List <T> ret = new List <T>(); reader = new DataReader(reader.ReadBytes(length)); while (reader.DataLeft > 0) { ret.Add(reader.ReadPrimitive <T>(littleEndian)); } return(ret.ToArray()); } } }
protected long BLen(IPrimitiveValue[] arr) { int size = ParserUtils.GetPrimitiveSize(arr.GetType().GetElementType()); // No choice, write it out if (size < 0) { DataWriter w = new DataWriter(); for (int i = 0; (i < arr.Length); i++) { arr[i].ToWriter(w, false); } return(w.BytesWritten); } else { return(arr.Length * size); } }
/// <summary> /// Get size of type /// </summary> /// <returns>The size of the type</returns> public override int GetSize() { return(ParserUtils.GetPrimitiveSize(DataType)); }