diff --git a/runtime/src/main/java/org/capnproto/StructReader.java b/runtime/src/main/java/org/capnproto/StructReader.java index cdce819..e1168bf 100644 --- a/runtime/src/main/java/org/capnproto/StructReader.java +++ b/runtime/src/main/java/org/capnproto/StructReader.java @@ -42,9 +42,9 @@ public final class StructReader { } } - public final byte getShortField(int offset) { + public final short getShortField(int offset) { if ((offset + 1) * 16 <= this.dataSize) { - return this.segment.buffer.get(this.data + offset * 2); + return this.segment.buffer.getShort(this.data + offset * 2); } else { return 0; } diff --git a/runtime/src/test/java/org/capnproto/LayoutTest.java b/runtime/src/test/java/org/capnproto/LayoutTest.java index e3f630a..e9a0a1c 100644 --- a/runtime/src/test/java/org/capnproto/LayoutTest.java +++ b/runtime/src/test/java/org/capnproto/LayoutTest.java @@ -11,9 +11,8 @@ public class LayoutTest { @Test public void simpleRawDataStruct() { byte[] data = {0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x01, 0x23, 0x45, 0x67, - (byte)(0x89 & 0xff), (byte)(0xab & 0xff), - (byte)(0xcd & 0xff), (byte)(0xef & 0xff)}; + 0x01, 0x23, 0x45, 0x67, (byte)0x89, (byte)0xab, + (byte)0xcd, (byte)0xef}; ByteBuffer buffer = ByteBuffer.wrap(data); buffer.order(java.nio.ByteOrder.LITTLE_ENDIAN); @@ -21,6 +20,17 @@ public class LayoutTest { StructReader reader = pointerReader.getStruct(); assertThat(reader.getLongField(0), equalTo(0xefcdab8967452301L)); + assertThat(reader.getLongField(1), equalTo(0L)); + assertThat(reader.getIntField(0), equalTo(0x67452301)); + assertThat(reader.getIntField(1), equalTo(0xefcdab89)); + assertThat(reader.getIntField(2), equalTo(0)); + assertThat(reader.getShortField(0), equalTo((short) 0x2301)); + assertThat(reader.getShortField(1), equalTo((short)0x6745)); + assertThat(reader.getShortField(2), equalTo((short)0xab89)); + assertThat(reader.getShortField(3), equalTo((short)0xefcd)); + assertThat(reader.getShortField(4), equalTo((short)0)); + + // TODO masking }