From a5cbea65e22b0ecbdf448cc896d8857ab6eca548 Mon Sep 17 00:00:00 2001 From: Juan Ignacio Ubeira <jubeira@ekumenlabs.com> Date: Thu, 20 Sep 2018 17:47:15 -0300 Subject: [PATCH] Using ChannelBuffers for int8[] data; fixing testInt8List. --- .../java/org/ros/internal/message/MessageImpl.java | 4 ++-- .../java/org/ros/internal/message/RawMessage.java | 2 +- .../internal/message/field/ChannelBufferField.java | 13 ++++++++++--- .../java/org/ros/internal/message/MessageTest.java | 10 ++++++++-- 4 files changed, 21 insertions(+), 8 deletions(-) diff --git a/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java b/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java index d7824dc..d41e041 100644 --- a/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java +++ b/message_generation/src/main/java/org/ros/internal/message/MessageImpl.java @@ -161,8 +161,8 @@ class MessageImpl implements RawMessage, GetInstance { } @Override - public byte[] getInt8Array(String name) { - return (byte[]) messageFields.getFieldValue(name); + public ChannelBuffer getInt8Array(String name) { + return (ChannelBuffer) messageFields.getFieldValue(name); } @Override diff --git a/message_generation/src/main/java/org/ros/internal/message/RawMessage.java b/message_generation/src/main/java/org/ros/internal/message/RawMessage.java index 999db7a..a7f413a 100644 --- a/message_generation/src/main/java/org/ros/internal/message/RawMessage.java +++ b/message_generation/src/main/java/org/ros/internal/message/RawMessage.java @@ -85,7 +85,7 @@ public interface RawMessage extends Message { byte getInt8(String name); - byte[] getInt8Array(String name); + ChannelBuffer getInt8Array(String name); <T extends Message> T getMessage(String name); diff --git a/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java b/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java index a13f542..3977205 100644 --- a/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java +++ b/message_generation/src/main/java/org/ros/internal/message/field/ChannelBufferField.java @@ -19,6 +19,7 @@ package org.ros.internal.message.field; import com.google.common.base.Preconditions; import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; import org.ros.internal.message.MessageBuffers; import java.nio.ByteOrder; @@ -52,9 +53,15 @@ public class ChannelBufferField extends Field { @Override public void setValue(Object value) { - Preconditions.checkArgument(((ChannelBuffer) value).order() == ByteOrder.LITTLE_ENDIAN); - Preconditions.checkArgument(size < 0 || ((ChannelBuffer) value).readableBytes() == size); - this.value = (ChannelBuffer) value; + ChannelBuffer channelBufferValue = null; + if (value instanceof byte[]) { + channelBufferValue = ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, byte[].class.cast(value)); + } else if (value instanceof ChannelBuffer) { + channelBufferValue = ChannelBuffer.class.cast(value); + } + Preconditions.checkArgument(channelBufferValue.order() == ByteOrder.LITTLE_ENDIAN); + Preconditions.checkArgument(size < 0 || channelBufferValue.readableBytes() == size); + this.value = channelBufferValue; } @Override diff --git a/message_generation/src/test/java/org/ros/internal/message/MessageTest.java b/message_generation/src/test/java/org/ros/internal/message/MessageTest.java index fe80bb4..241009d 100644 --- a/message_generation/src/test/java/org/ros/internal/message/MessageTest.java +++ b/message_generation/src/test/java/org/ros/internal/message/MessageTest.java @@ -20,11 +20,15 @@ import static org.junit.Assert.assertEquals; import com.google.common.collect.Lists; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; import org.junit.Before; import org.junit.Test; import org.ros.internal.message.topic.TopicDefinitionResourceProvider; import org.ros.message.MessageFactory; +import java.nio.ByteOrder; + /** * @author damonkohler@google.com (Damon Kohler) */ @@ -114,11 +118,13 @@ public class MessageTest { assertEquals("Hello, ROS! # comment", rawMessage.getString("data")); } + @Test public void testInt8List() { topicDefinitionResourceProvider.add("foo/foo", "int8[] data"); RawMessage rawMessage = messageFactory.newFromType("foo/foo"); - byte[] data = new byte[] { (byte) 1, (byte) 2, (byte) 3 }; - rawMessage.setInt8Array("data", data); + byte[] rawData = new byte[] { (byte) 1, (byte) 2, (byte) 3 }; + ChannelBuffer data = ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, rawData); + rawMessage.setInt8Array("data", rawData); assertEquals(data, rawMessage.getInt8Array("data")); } } \ No newline at end of file -- GitLab