public static void TestDouble()
        {
            var b       = new DirectBuffer(new byte[16]);
            var initial = 123.456;

            b.DoublePutLittleEndian(0, initial);

            var d = b.DoubleGetLittleEndian(0);
        }
Example #2
0
        public static PrimitiveValue Get(DirectBuffer buffer, PrimitiveType type, int length)
        {
            if (length == 0)
            {
                return(null);
            }

            switch (type.Type)
            {
            case SbePrimitiveType.Char:
                if (length == 1)
                {
                    return(new PrimitiveValue(buffer.CharGet(0), 1));
                }
                else
                {
                    var array = new byte[length];
                    buffer.GetBytes(0, array, 0, array.Length);
                    return(new PrimitiveValue(array, "UTF-8", array.Length));
                }

            case SbePrimitiveType.Int8:
                return(new PrimitiveValue(buffer.Int8Get(0), 1));

            case SbePrimitiveType.Int16:
                return(new PrimitiveValue(buffer.Int16GetLittleEndian(0), 2));

            case SbePrimitiveType.Int32:
                return(new PrimitiveValue(buffer.Int32GetLittleEndian(0), 4));

            case SbePrimitiveType.Int64:
                return(new PrimitiveValue(buffer.Int64GetLittleEndian(0), 8));

            case SbePrimitiveType.UInt8:
                return(new PrimitiveValue(buffer.Uint8Get(0), 1));

            case SbePrimitiveType.UInt16:
                return(new PrimitiveValue(buffer.Uint16GetLittleEndian(0), 2));

            case SbePrimitiveType.UInt32:
                return(new PrimitiveValue(buffer.Uint32GetLittleEndian(0), 4));

            case SbePrimitiveType.UInt64:
                return(new PrimitiveValue(buffer.Uint64GetLittleEndian(0), 8));

            case SbePrimitiveType.Float:
                return(new PrimitiveValue(buffer.FloatGetLittleEndian(0), 4));

            case SbePrimitiveType.Double:
                return(new PrimitiveValue(buffer.DoubleGetLittleEndian(0), 8));

            default:
                return(null);
            }
        }
        public static PrimitiveValue Get(DirectBuffer buffer, PrimitiveType type, int length)
        {
            if (length == 0)
            {
                return null;
            }

            switch (type.Type)
            {
                case SbePrimitiveType.Char:
                    if (length == 1)
                    {
                        return new PrimitiveValue(buffer.CharGet(0), 1);
                    }
                    else
                    {
                        var array = new byte[length];
                        buffer.GetBytes(0, array, 0, array.Length);
                        return new PrimitiveValue(array, "UTF-8", array.Length);
                    }

                case SbePrimitiveType.Int8:
                    return new PrimitiveValue(buffer.Int8Get(0), 1);

                case SbePrimitiveType.Int16:
                    return new PrimitiveValue(buffer.Int16GetLittleEndian(0), 2);

                case SbePrimitiveType.Int32:
                    return new PrimitiveValue(buffer.Int32GetLittleEndian(0), 4);

                case SbePrimitiveType.Int64:
                    return new PrimitiveValue(buffer.Int64GetLittleEndian(0), 8);

                case SbePrimitiveType.UInt8:
                    return new PrimitiveValue(buffer.Uint8Get(0), 1);

                case SbePrimitiveType.UInt16:
                    return new PrimitiveValue(buffer.Uint16GetLittleEndian(0), 2);

                case SbePrimitiveType.UInt32:
                    return new PrimitiveValue(buffer.Uint32GetLittleEndian(0), 4);

                case SbePrimitiveType.UInt64:
                    return new PrimitiveValue(buffer.Uint64GetLittleEndian(0), 8);

                case SbePrimitiveType.Float:
                    return new PrimitiveValue(buffer.FloatGetLittleEndian(0), 4);

                case SbePrimitiveType.Double:
                    return new PrimitiveValue(buffer.DoubleGetLittleEndian(0), 8);

                default:
                    return null;
            }
        }
        public void ShouldGetDoubleLittleEndian()
        {
            const double value = double.MaxValue - 1;
            const int    index = 0;
            var          bytes = BitConverter.GetBytes(value);

            Array.Copy(bytes, 0, _buffer, index, 8);

            var result = _directBuffer.DoubleGetLittleEndian(index);

            Assert.AreEqual(value, result);
        }
Example #5
0
        //TODO big endian
        private static void MapEncodingToString(StringBuilder sb, DirectBuffer buffer, int index, Encoding encoding)
        {
            switch (encoding.PrimitiveType.Type)
            {
            case SbePrimitiveType.Char:
                sb.Append('\'').Append(buffer.CharGet(index)).Append('\'');
                break;

            case SbePrimitiveType.Int8:
                sb.Append(buffer.Int8Get(index));
                break;

            case SbePrimitiveType.Int16:
                sb.Append(buffer.Int16GetLittleEndian(index));
                break;

            case SbePrimitiveType.Int32:
                sb.Append(buffer.Int32GetLittleEndian(index));
                break;

            case SbePrimitiveType.Int64:
                sb.Append(buffer.Int64GetLittleEndian(index));
                break;

            case SbePrimitiveType.UInt8:
                sb.Append(buffer.Uint8Get(index));
                break;

            case SbePrimitiveType.UInt16:
                sb.Append(buffer.Uint16GetLittleEndian(index));
                break;

            case SbePrimitiveType.UInt32:
                sb.Append(buffer.Uint32GetLittleEndian(index));
                break;

            case SbePrimitiveType.UInt64:
                sb.Append(buffer.Uint64GetLittleEndian(index));
                break;

            case SbePrimitiveType.Float:
                sb.Append(buffer.FloatGetLittleEndian(index));
                break;

            case SbePrimitiveType.Double:
                sb.Append(buffer.DoubleGetLittleEndian(index));
                break;
            }
        }
        //TODO big endian
        private static void MapEncodingToString(StringBuilder sb, DirectBuffer buffer, int index, Encoding encoding)
        {
            switch (encoding.PrimitiveType.Type)
            {
                case SbePrimitiveType.Char:
                    sb.Append('\'').Append(buffer.CharGet(index)).Append('\'');
                    break;

                case SbePrimitiveType.Int8:
                    sb.Append(buffer.Int8Get(index));
                    break;

                case SbePrimitiveType.Int16:
                    sb.Append(buffer.Int16GetLittleEndian(index));
                    break;

                case SbePrimitiveType.Int32:
                    sb.Append(buffer.Int32GetLittleEndian(index));
                    break;

                case SbePrimitiveType.Int64:
                    sb.Append(buffer.Int64GetLittleEndian(index));
                    break;

                case SbePrimitiveType.UInt8:
                    sb.Append(buffer.Uint8Get(index));
                    break;

                case SbePrimitiveType.UInt16:
                    sb.Append(buffer.Uint16GetLittleEndian(index));
                    break;

                case SbePrimitiveType.UInt32:
                    sb.Append(buffer.Uint32GetLittleEndian(index));
                    break;

                case SbePrimitiveType.UInt64:
                    sb.Append(buffer.Uint64GetLittleEndian(index));
                    break;

                case SbePrimitiveType.Float:
                    sb.Append(buffer.FloatGetLittleEndian(index));
                    break;

                case SbePrimitiveType.Double:
                    sb.Append(buffer.DoubleGetLittleEndian(index));
                    break;
            }
        }
        private int WriteFieldsToTable(IWritableReactiveTable table, IReactiveColumn column, int rowId, DirectBuffer buffer, int bufferOffset, int read)
        {
            var columnId  = column.ColumnId;
            var remaining = read - bufferOffset;

            if (column.Type == typeof(int))
            {
                if (remaining < sizeof(int))
                {
                    return(-1);
                }

                table.SetValue(columnId, rowId, buffer.Int32GetLittleEndian(bufferOffset));
                return(sizeof(int));
            }
            else if (column.Type == typeof(short))
            {
                if (remaining < sizeof(short))
                {
                    return(-1);
                }
                table.SetValue(columnId, rowId, buffer.Int16GetLittleEndian(bufferOffset));
                return(sizeof(short));
            }
            else if (column.Type == typeof(string))
            {
                if (remaining < sizeof(ushort))
                {
                    return(-1);
                }
                var stringLength = buffer.Uint16GetLittleEndian(bufferOffset);

                bufferOffset += sizeof(ushort);
                remaining     = read - bufferOffset;

                if (remaining < stringLength)
                {
                    return(-1);
                }
                var bytesRead = buffer.GetBytes(bufferOffset, _stringTempBuffer, 0, stringLength);
                var value     = Encoding.Default.GetString(_stringTempBuffer, 0, bytesRead);
                table.SetValue(columnId, rowId, value);
                return(sizeof(ushort) + bytesRead);
            }
            else if (column.Type == typeof(bool))
            {
                if (remaining < sizeof(byte))
                {
                    return(-1);
                }
                var b = buffer.CharGet(bufferOffset);
                table.SetValue(columnId, rowId, b == 1);
                return(sizeof(byte));
            }
            else if (column.Type == typeof(double))
            {
                if (remaining < sizeof(double))
                {
                    return(-1);
                }
                var value = buffer.DoubleGetLittleEndian(bufferOffset);
                table.SetValue(columnId, rowId, value);
                return(sizeof(double));
            }
            else if (column.Type == typeof(long))
            {
                if (remaining < sizeof(long))
                {
                    return(-1);
                }
                table.SetValue(columnId, rowId, buffer.Int64GetLittleEndian(bufferOffset));
                return(sizeof(long));
            }
            else if (column.Type == typeof(decimal))
            {
                if (remaining < sizeof(decimal))
                {
                    return(-1);
                }
                Buffer.BlockCopy(_byteArray, bufferOffset, _decimalBuffer, 0, _decimalBuffer.Length);
                table.SetValue(columnId, rowId, _bytesToDecimal(_decimalBuffer));
                return(_decimalBuffer.Length);
            }
            else if (column.Type == typeof(DateTime))
            {
                //                    table.SetValue(columnId, rowId, BclHelpers.ReadDateTime(reader));
            }
            else if (column.Type == typeof(TimeSpan))
            {
                //                    table.SetValue(columnId, rowId, BclHelpers.ReadTimeSpan(reader));
            }
            else if (column.Type == typeof(Guid))
            {
                //                    table.SetValue(columnId, rowId, BclHelpers.ReadGuid(reader));
            }
            else if (column.Type == typeof(byte))
            {
                if (remaining < sizeof(byte))
                {
                    return(-1);
                }
                table.SetValue(columnId, rowId, buffer.CharGet(bufferOffset));
                return(sizeof(byte));
            }
            else if (column.Type == typeof(char))
            {
                if (remaining < sizeof(char))
                {
                    return(-1);
                }
                table.SetValue(columnId, rowId, (char)buffer.Uint16GetLittleEndian(bufferOffset));
                return(sizeof(char));
            }
            else if (column.Type == typeof(float))
            {
                if (remaining < sizeof(float))
                {
                    return(-1);
                }
                table.SetValue(columnId, rowId, buffer.FloatGetLittleEndian(bufferOffset));
                return(sizeof(float));
            }
            return(0);
        }