Example #1
0
        private static long GetLong(DirectBuffer buffer, int index, Encoding encoding)
        {
            switch (encoding.PrimitiveType.Type)
            {
            case SbePrimitiveType.Char:
                return(buffer.CharGet(index));

            case SbePrimitiveType.Int8:
                return(buffer.Int8Get(index));

            case SbePrimitiveType.Int16:
                return(buffer.Int16GetLittleEndian(index));

            case SbePrimitiveType.Int32:
                return(buffer.Int32GetLittleEndian(index));

            case SbePrimitiveType.Int64:
                return(buffer.Int64GetLittleEndian(index));

            case SbePrimitiveType.UInt8:
                return(buffer.Uint8Get(index));

            case SbePrimitiveType.UInt16:
                return(buffer.Uint16GetLittleEndian(index));

            case SbePrimitiveType.UInt32:
                return(buffer.Uint32GetLittleEndian(index));

            case SbePrimitiveType.UInt64:
                return((long)buffer.Uint64GetLittleEndian(index));     // TODO this is incorrect

            default:
                throw new ArgumentException("Unsupported type for long: " + encoding.PrimitiveType);
            }
        }
        public void ShouldGetInt8(sbyte value, int index)
        {
            _buffer[index] = *(byte *)&value;

            var result = _directBuffer.Int8Get(index);

            Assert.AreEqual(value, result);
        }
Example #3
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;
            }
        }
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;
            }
        }
Example #6
0
        /// <summary>
        /// Get an integer value from a buffer at a given index.
        /// </summary>
        /// <param name="buffer"> from which to read. </param>
        /// <param name="bufferIndex"> at which he integer should be read. </param>
        /// <param name="type"> of the integer encoded in the buffer. </param>
        /// <param name="byteOrder"> of the integer in the buffer. </param>
        /// <returns> the value of the encoded integer. </returns>
        internal static int GetInt(DirectBuffer buffer, int bufferIndex, PrimitiveType type, ByteOrder byteOrder)
        {
            switch (type.Type)
            {
                case SbePrimitiveType.Int8:
                    return buffer.Int8Get(bufferIndex);

                case SbePrimitiveType.UInt8:
                    return buffer.Uint8Get(bufferIndex);

                case SbePrimitiveType.Int16:
                    return byteOrder == ByteOrder.LittleEndian ? buffer.Int16GetLittleEndian(bufferIndex) : buffer.Int16GetBigEndian(bufferIndex);

                case SbePrimitiveType.UInt16:
                    return byteOrder == ByteOrder.LittleEndian ? buffer.Uint16GetLittleEndian(bufferIndex) : buffer.Uint16GetBigEndian(bufferIndex);

                case SbePrimitiveType.Int32:
                    return byteOrder == ByteOrder.LittleEndian ? buffer.Int32GetLittleEndian(bufferIndex) : buffer.Int32GetBigEndian(bufferIndex);

                default:
                    throw new System.ArgumentException("Unsupported type: " + type);
            }
        }
Example #7
0
        /// <summary>
        /// Get an integer value from a buffer at a given index.
        /// </summary>
        /// <param name="buffer"> from which to read. </param>
        /// <param name="bufferIndex"> at which he integer should be read. </param>
        /// <param name="type"> of the integer encoded in the buffer. </param>
        /// <param name="byteOrder"> of the integer in the buffer. </param>
        /// <returns> the value of the encoded integer. </returns>
        internal static int GetInt(DirectBuffer buffer, int bufferIndex, PrimitiveType type, ByteOrder byteOrder)
        {
            switch (type.Type)
            {
            case SbePrimitiveType.Int8:
                return(buffer.Int8Get(bufferIndex));

            case SbePrimitiveType.UInt8:
                return(buffer.Uint8Get(bufferIndex));

            case SbePrimitiveType.Int16:
                return(byteOrder == ByteOrder.LittleEndian ? buffer.Int16GetLittleEndian(bufferIndex) : buffer.Int16GetBigEndian(bufferIndex));

            case SbePrimitiveType.UInt16:
                return(byteOrder == ByteOrder.LittleEndian ? buffer.Uint16GetLittleEndian(bufferIndex) : buffer.Uint16GetBigEndian(bufferIndex));

            case SbePrimitiveType.Int32:
                return(byteOrder == ByteOrder.LittleEndian ? buffer.Int32GetLittleEndian(bufferIndex) : buffer.Int32GetBigEndian(bufferIndex));

            default:
                throw new System.ArgumentException("Unsupported type: " + type);
            }
        }
        private static long GetLong(DirectBuffer buffer, int index, Encoding encoding)
        {
            switch (encoding.PrimitiveType.Type)
            {
                case SbePrimitiveType.Char:
                    return buffer.CharGet(index);

                case SbePrimitiveType.Int8:
                    return buffer.Int8Get(index);

                case SbePrimitiveType.Int16:
                    return buffer.Int16GetLittleEndian(index);

                case SbePrimitiveType.Int32:
                    return buffer.Int32GetLittleEndian(index);

                case SbePrimitiveType.Int64:
                    return buffer.Int64GetLittleEndian(index);

                case SbePrimitiveType.UInt8:
                    return buffer.Uint8Get(index);

                case SbePrimitiveType.UInt16:
                    return buffer.Uint16GetLittleEndian(index);

                case SbePrimitiveType.UInt32:
                    return buffer.Uint32GetLittleEndian(index);

                case SbePrimitiveType.UInt64:
                    return (long) buffer.Uint64GetLittleEndian(index); // TODO this is incorrect

                default:
                    throw new ArgumentException("Unsupported type for long: " + encoding.PrimitiveType);
            }
        }
        //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 void FillValue(DirectBuffer buffer, SbeField field2, ref int offset)
        {
            if (field2.Presence.ToLower().Contains("constant"))
            {
                return;
            }

            SbeField field = field2.Clone();

            if (field.PrimitiveType == null)
            {
                field.PrimitiveType = field.Type;
            }

            if (field.PrimitiveType.ToLower().Equals("uint8"))
            {
                field2.Value = buffer.Uint8Get(offset).ToString();
                offset      += 1;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint16"))
            {
                field2.Value = buffer.Uint16GetLittleEndian(offset).ToString();
                offset      += 2;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint32"))
            {
                field2.Value = buffer.Uint32GetLittleEndian(offset).ToString();
                offset      += 4;
            }
            else if (field.PrimitiveType.ToLower().Equals("uint64"))
            {
                field2.Value = buffer.Uint64GetLittleEndian(offset).ToString();
                offset      += 8;
            }
            else if (field.PrimitiveType.ToLower().Equals("int8"))
            {
                field2.Value = buffer.Int8Get(offset).ToString();
                offset      += 1;
            }
            else if (field.PrimitiveType.ToLower().Equals("int16"))
            {
                field2.Value = buffer.Int16GetLittleEndian(offset).ToString();
                offset      += 2;
            }
            else if (field.PrimitiveType.ToLower().Equals("int32"))
            {
                field2.Value = buffer.Int32GetLittleEndian(offset).ToString();
                offset      += 4;
            }
            else if (field.PrimitiveType.ToLower().Equals("int64"))
            {
                field2.Value = buffer.Int64GetLittleEndian(offset).ToString();
                offset      += 8;
            }
            else if (field.PrimitiveType.ToLower().Equals("char"))
            {
                if (!String.IsNullOrEmpty(field.CharacterEncoding))
                {
                    List <byte> charString = new List <byte>();
                    for (int i = 0; i < field.Length; i++)
                    {
                        charString.Add(buffer.CharGet(offset + i));
                    }
                    field2.Value = Encoding.GetEncoding(field.CharacterEncoding).GetString(charString.ToArray());
                }
                else
                {
                    byte[] charString = Encoding.GetEncoding("UTF-8").GetBytes(field.Value);
                    buffer.CharPut(offset, charString[0]);
                }

                offset += field.Length.Value;
            }

            if (field2.Fields != null && field2.Fields.Count > 0)
            {
                if (!field2.Type.ToLower().EndsWith("encoding"))
                {
                    foreach (SbeField child in field2.Fields)
                    {
                        FillValue(buffer, child, ref offset);
                    }
                }
                else
                {
                    FillValue(buffer, field2.Fields[0], ref offset);
                    List <byte> charString = new List <byte>();
                    int         len        = int.Parse(field2.Fields[0].Value);
                    for (int i = 0; i < len; i++)
                    {
                        charString.Add(buffer.CharGet(offset + i));
                    }
                    field2.Fields[1].Value = Encoding.GetEncoding(field2.Fields[1].CharacterEncoding).GetString(charString.ToArray());
                    offset += len;
                }
            }
        }