Skip to content
Snippets Groups Projects
Commit a5cbea65 authored by Juan Ignacio Ubeira's avatar Juan Ignacio Ubeira
Browse files

Using ChannelBuffers for int8[] data; fixing testInt8List.

parent 24348c46
Branches
Tags
No related merge requests found
......@@ -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
......
......@@ -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);
......
......@@ -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
......
......@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment