コード例 #1
0
        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));
            }
        }
コード例 #2
0
        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());
                }
            }
        }
コード例 #3
0
        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);
            }
        }
コード例 #4
0
ファイル: BuiltinParserType.cs プロジェクト: wflk/canape
 /// <summary>
 /// Get size of type
 /// </summary>
 /// <returns>The size of the type</returns>
 public override int GetSize()
 {
     return(ParserUtils.GetPrimitiveSize(DataType));
 }