public void ShouldPutFloatLittleEndian() { const float value = float.MaxValue - 1; const int index = 0; _directBuffer.FloatPutLittleEndian(index, value); Assert.AreEqual(value, *(float *)(_pBuffer + index)); }
public static int Put(DirectBuffer buffer, PrimitiveValue value, PrimitiveType type) { if (value == null) { return 0; } switch (type.Type) { case SbePrimitiveType.Char: if (value.Size == 1) { buffer.CharPut(0, (byte)value.LongValue()); return 1; } else { var byteArrayValue = value.ByteArrayValue(); buffer.SetBytes(0, byteArrayValue, 0, byteArrayValue.Length); return byteArrayValue.Length; } case SbePrimitiveType.Int8: buffer.Int8Put(0, (sbyte)value.LongValue()); return 1; case SbePrimitiveType.Int16: buffer.Int16PutLittleEndian(0, (short)value.LongValue()); return 2; case SbePrimitiveType.Int32: buffer.Int32PutLittleEndian(0, (int)value.LongValue()); return 4; case SbePrimitiveType.Int64: buffer.Int64PutLittleEndian(0, value.LongValue()); return 8; case SbePrimitiveType.UInt8: buffer.Uint8Put(0, (byte)value.LongValue()); return 1; case SbePrimitiveType.UInt16: buffer.Uint16PutLittleEndian(0, (ushort)value.LongValue()); return 2; case SbePrimitiveType.UInt32: buffer.Uint32PutLittleEndian(0, (uint) value.LongValue()); return 4; case SbePrimitiveType.UInt64: buffer.Uint64PutLittleEndian(0, value.ULongValue()); return 8; case SbePrimitiveType.Float: buffer.FloatPutLittleEndian(0, (float) value.DoubleValue()); return 4; case SbePrimitiveType.Double: buffer.DoublePutLittleEndian(0, value.DoubleValue()); return 8; default: return 0; } }
public static int Put(DirectBuffer buffer, PrimitiveValue value, PrimitiveType type) { if (value == null) { return(0); } switch (type.Type) { case SbePrimitiveType.Char: if (value.Size == 1) { buffer.CharPut(0, (byte)value.LongValue()); return(1); } else { var byteArrayValue = value.ByteArrayValue(); buffer.SetBytes(0, byteArrayValue, 0, byteArrayValue.Length); return(byteArrayValue.Length); } case SbePrimitiveType.Int8: buffer.Int8Put(0, (sbyte)value.LongValue()); return(1); case SbePrimitiveType.Int16: buffer.Int16PutLittleEndian(0, (short)value.LongValue()); return(2); case SbePrimitiveType.Int32: buffer.Int32PutLittleEndian(0, (int)value.LongValue()); return(4); case SbePrimitiveType.Int64: buffer.Int64PutLittleEndian(0, value.LongValue()); return(8); case SbePrimitiveType.UInt8: buffer.Uint8Put(0, (byte)value.LongValue()); return(1); case SbePrimitiveType.UInt16: buffer.Uint16PutLittleEndian(0, (ushort)value.LongValue()); return(2); case SbePrimitiveType.UInt32: buffer.Uint32PutLittleEndian(0, (uint)value.LongValue()); return(4); case SbePrimitiveType.UInt64: buffer.Uint64PutLittleEndian(0, value.ULongValue()); return(8); case SbePrimitiveType.Float: buffer.FloatPutLittleEndian(0, (float)value.DoubleValue()); return(4); case SbePrimitiveType.Double: buffer.DoublePutLittleEndian(0, value.DoubleValue()); return(8); default: return(0); } }
private int WriteUpdateValue(IReactiveTable table, TableUpdate tableUpdate, DirectBuffer buffer, int offset) { var column = tableUpdate.Column; if (column.Type == typeof(int)) { buffer.Int32PutLittleEndian(offset, table.GetValue <int>(column.ColumnId, tableUpdate.RowIndex)); return(sizeof(int)); } if (column.Type == typeof(short)) { buffer.Int16PutLittleEndian(offset, table.GetValue <short>(column.ColumnId, tableUpdate.RowIndex)); return(sizeof(short)); } if (column.Type == typeof(string)) { var stringValue = table.GetValue <string>(column.ColumnId, tableUpdate.RowIndex) ?? string.Empty; // Set the length var length = (ushort)stringValue.Length; buffer.Uint16PutLittleEndian(offset, length); var written = sizeof(ushort); offset += written; // And then the value var bytesWritten = Encoding.Default.GetBytes(stringValue, 0, stringValue.Length, _stringBuffer, 0); _buffer.SetBytes(offset, _stringBuffer, 0, bytesWritten); written += bytesWritten; //written += WriteStringToByteArray(stringValue, _byteArray, offset); return(written); } if (column.Type == typeof(bool)) { buffer.CharPut(offset, (byte)(table.GetValue <bool>(column.ColumnId, tableUpdate.RowIndex) ? 1 : 0)); return(sizeof(byte)); } if (column.Type == typeof(double)) { var value = table.GetValue <double>(column.ColumnId, tableUpdate.RowIndex); buffer.DoublePutLittleEndian(offset, value); return(sizeof(double)); } if (column.Type == typeof(long)) { buffer.Int64PutLittleEndian(offset, table.GetValue <long>(column.ColumnId, tableUpdate.RowIndex)); return(sizeof(long)); } if (column.Type == typeof(decimal)) { var decimalVal = table.GetValue <decimal>(column.ColumnId, tableUpdate.RowIndex); _decimalGetBytes(decimalVal, _decimalBuffer); buffer.SetBytes(offset, _decimalBuffer, 0, _decimalBuffer.Length); return(_decimalBuffer.Length); } if (column.Type == typeof(DateTime)) { throw new NotImplementedException(); } if (column.Type == typeof(TimeSpan)) { throw new NotImplementedException(); } if (column.Type == typeof(Guid)) { throw new NotImplementedException(); } if (column.Type == typeof(float)) { buffer.FloatPutLittleEndian(offset, table.GetValue <float>(column.ColumnId, tableUpdate.RowIndex)); return(sizeof(float)); } if (column.Type == typeof(byte)) { buffer.CharPut(offset, table.GetValue <byte>(column.ColumnId, tableUpdate.RowIndex)); return(sizeof(byte)); } if (column.Type == typeof(char)) { buffer.Uint16PutLittleEndian(offset, table.GetValue <char>(column.ColumnId, tableUpdate.RowIndex)); return(sizeof(char)); } return(0); }