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); }
public static T UnpackData <T>(NomadValue value, Func <byte[], int, T> converter) { var data = value.Data; var buffer = data.Buffer; return(converter(buffer, 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); }