diff --git a/compiler/src/test/scala/org/capnproto/EncodingTest.scala b/compiler/src/test/scala/org/capnproto/EncodingTest.scala index 34437f0..9fadfe6 100644 --- a/compiler/src/test/scala/org/capnproto/EncodingTest.scala +++ b/compiler/src/test/scala/org/capnproto/EncodingTest.scala @@ -11,6 +11,7 @@ class EncodingSuite extends FunSuite { val allTypes = message.initRoot(TestAllTypes.Builder.factory); allTypes.setVoidField(); allTypes.setBoolField(true); + // ... } } diff --git a/compiler/src/test/schema/test.capnp b/compiler/src/test/schema/test.capnp index 8e0a957..cb4705b 100644 --- a/compiler/src/test/schema/test.capnp +++ b/compiler/src/test/schema/test.capnp @@ -26,8 +26,9 @@ struct TestAllTypes { uInt16Field @7 : UInt16; uInt32Field @8 : UInt32; uInt64Field @9 : UInt64; -# float32Field @10 : Float32; -# float64Field @11 : Float64; + float32Field @10 : Float32; + float64Field @11 : Float64; + textField @12 : Text; # ... } diff --git a/project/build.scala b/project/build.scala index 7aadd96..df37775 100644 --- a/project/build.scala +++ b/project/build.scala @@ -14,12 +14,13 @@ object Build extends sbt.Build { project( id = "compiler", base = file("compiler") - ).settings(makeCppTask).dependsOn(runtime) + ).dependsOn(runtime) + .settings(makeCppTask) .settings(compile <<= compile in Compile dependsOn makeCpp) .settings(compileTestSchemaTask) - - .settings(test <<= test in Test dependsOn compileTestSchema ) + .settings(test <<= test in Test dependsOn compileTestSchema) .settings(unmanagedSourceDirectories in Test += sourceDirectory.value / "test" / "generated") + .settings(cleanFiles += sourceDirectory.value / "test" / "generated") lazy val runtime = project( diff --git a/runtime/src/main/java/org/capnproto/StructBuilder.java b/runtime/src/main/java/org/capnproto/StructBuilder.java index be0387f..4cc8ec8 100644 --- a/runtime/src/main/java/org/capnproto/StructBuilder.java +++ b/runtime/src/main/java/org/capnproto/StructBuilder.java @@ -67,6 +67,23 @@ public final class StructBuilder { this.segment.buffer.putLong(this.data + offset * 8, value); } + public final float getFloatField(int offset) { + return this.segment.buffer.getFloat(this.data + offset * 4); + } + + public final void setFloatField(int offset, float value) { + this.segment.buffer.putFloat(this.data + offset * 4, value); + } + + public final double getDoubleField(int offset) { + return this.segment.buffer.getDouble(this.data + offset * 8); + } + + public final void setDoubleField(int offset, double value) { + this.segment.buffer.putDouble(this.data + offset * 8, value); + } + + public final PointerBuilder getPointerField(int index) { return new PointerBuilder(this.segment, this.pointers + index); } diff --git a/runtime/src/main/java/org/capnproto/StructReader.java b/runtime/src/main/java/org/capnproto/StructReader.java index 99b37d4..5adb769 100644 --- a/runtime/src/main/java/org/capnproto/StructReader.java +++ b/runtime/src/main/java/org/capnproto/StructReader.java @@ -67,6 +67,22 @@ public final class StructReader { } } + public final float getFloatField(int offset) { + if ((offset + 1) * 32 <= this.dataSize) { + return this.segment.buffer.getFloat(this.data + offset * 4); + } else { + return 0; + } + } + + public final double getDoubleField(int offset) { + if ((offset + 1) * 64 <= this.dataSize) { + return this.segment.buffer.getDouble(this.data + offset * 8); + } else { + return 0; + } + } + public final PointerReader getPointerField(int ptrIndex) { if (ptrIndex < this.pointerCount) { return new PointerReader(this.segment,