Esempio n. 1
0
    public static int PackArray <T>(NomadValue value, List <T> array, Func <T, byte[]> converter, int size)
    {
        var data = value.Data;

        var offset = 4;
        var count  = array.Count;

        var result = new byte[(count * size) + 4];

        Buffer.BlockCopy(BitConverter.GetBytes(count), 0, result, 0, 4);

        for (int i = 0; i < count; i++)
        {
            var val    = array[i];
            var buffer = converter(val);

            Buffer.BlockCopy(buffer, 0, result, offset, size);

            offset += size;
        }

        value.Data = new AttributeData(DataType.Array, result);

        return(count);
    }
Esempio n. 2
0
    public static T UnpackData <T>(NomadValue value, Func <byte[], int, T> converter)
    {
        var data   = value.Data;
        var buffer = data.Buffer;

        return(converter(buffer, 0));
    }
Esempio n. 3
0
    public static T[] UnpackArray <T>(NomadValue value, Func <byte[], int, T> converter, int size, out int count)
    {
        var data   = value.Data;
        var buffer = data.Buffer;

        count = BitConverter.ToInt32(buffer, 0);

        var offset = 4;
        var result = new T[count];

        for (int i = 0; i < count; i++)
        {
            result[i] = converter(buffer, offset);
            offset   += size;
        }

        return(result);
    }