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); }
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; } }
//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; } }
/// <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); } }
/// <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); } }
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; } } }