From 0b80660092ab062a6896da643b9b9987ae0bfc7e Mon Sep 17 00:00:00 2001 From: Sven Robertz <sven@cs.lth.se> Date: Thu, 7 Mar 2013 10:30:34 +0100 Subject: [PATCH] started refactoring Java EncoderChannel to use LabCommWriter + minor fixes --- compiler/build.xml | 4 ++-- lib/c/labcomm_fd_reader_writer.h | 3 ++- .../control/labcomm/LabCommEncoderChannel.java | 12 +++++++++--- .../se/lth/control/labcomm/LabCommWriter.java | 4 +++- .../se/lth/control/labcomm/WriterWrapper.java | 17 +++++++++++++++++ 5 files changed, 33 insertions(+), 7 deletions(-) create mode 100644 lib/java/se/lth/control/labcomm/WriterWrapper.java diff --git a/compiler/build.xml b/compiler/build.xml index ff8cf2a..dd0e269 100644 --- a/compiler/build.xml +++ b/compiler/build.xml @@ -15,7 +15,7 @@ <property name="tools" value="tools"/> <!-- "test" is the directory where tests are located. --> -<property name="test" value="test"/> +<property name="test" value="../test"/> <!-- "jflex" is an ant task class for the scanner generator in JFlex.jar --> <taskdef name="jflex" classname="JFlex.anttask.JFlexTask" classpath="tools/JFlex.jar"/> @@ -66,7 +66,7 @@ classpath="tools/jastadd2.jar"/> <!-- compile sources --> <target name="test" depends="jar"> <echo message = "Running tests"/> - <exec executable="./run" dir="test"> + <exec executable="./run" dir="../test"> <env key="PYTHONPATH" value="../lib/python"/> <!--arg value="hej"/--> </exec> diff --git a/lib/c/labcomm_fd_reader_writer.h b/lib/c/labcomm_fd_reader_writer.h index 538dccd..2d08cf1 100644 --- a/lib/c/labcomm_fd_reader_writer.h +++ b/lib/c/labcomm_fd_reader_writer.h @@ -6,4 +6,5 @@ extern int labcomm_fd_reader( extern int labcomm_fd_writer( labcomm_writer_t *r, - labcomm_writer_action_t action); + labcomm_writer_action_t action, + ...); diff --git a/lib/java/se/lth/control/labcomm/LabCommEncoderChannel.java b/lib/java/se/lth/control/labcomm/LabCommEncoderChannel.java index cbb4bd7..4154ca0 100644 --- a/lib/java/se/lth/control/labcomm/LabCommEncoderChannel.java +++ b/lib/java/se/lth/control/labcomm/LabCommEncoderChannel.java @@ -7,18 +7,22 @@ import java.io.OutputStream; public class LabCommEncoderChannel implements LabCommEncoder { - private OutputStream writer; + private LabCommWriter writer; private ByteArrayOutputStream bytes; private DataOutputStream data; private LabCommEncoderRegistry registry; - public LabCommEncoderChannel(OutputStream writer) { + public LabCommEncoderChannel(LabCommWriter writer) { this.writer = writer; bytes = new ByteArrayOutputStream(); data = new DataOutputStream(bytes); registry = new LabCommEncoderRegistry(); } + public LabCommEncoderChannel(OutputStream writer) { + this(new WriterWrapper(writer)); + } + public void register(LabCommDispatcher dispatcher) throws IOException { int index = registry.add(dispatcher); encodePacked32(LabComm.SAMPLE); @@ -37,7 +41,9 @@ public class LabCommEncoderChannel implements LabCommEncoder { public void end(Class<? extends LabCommSample> c) throws IOException { data.flush(); - bytes.writeTo(writer); + //XXX when writer was a stream, it was probably a bit more GC efficient: + //bytes.writeTo(writer); + writer.write(bytes.toByteArray()); bytes.reset(); } diff --git a/lib/java/se/lth/control/labcomm/LabCommWriter.java b/lib/java/se/lth/control/labcomm/LabCommWriter.java index b45cd57..887c547 100644 --- a/lib/java/se/lth/control/labcomm/LabCommWriter.java +++ b/lib/java/se/lth/control/labcomm/LabCommWriter.java @@ -1,7 +1,9 @@ package se.lth.control.labcomm; +import java.io.IOException; + public interface LabCommWriter { - public void write(byte[] data); + public void write(byte[] data) throws IOException; } diff --git a/lib/java/se/lth/control/labcomm/WriterWrapper.java b/lib/java/se/lth/control/labcomm/WriterWrapper.java new file mode 100644 index 0000000..0f7d192 --- /dev/null +++ b/lib/java/se/lth/control/labcomm/WriterWrapper.java @@ -0,0 +1,17 @@ +package se.lth.control.labcomm; + +import java.io.OutputStream; +import java.io.IOException; + +class WriterWrapper implements LabCommWriter{ + + private OutputStream os; + + public WriterWrapper(OutputStream os) { + this.os = os; + } + + public void write(byte[] data) throws IOException { + os.write(data); + } +} -- GitLab