From 416395ebcea1b377fa92985f3ccb6e69f1f8cd83 Mon Sep 17 00:00:00 2001 From: "Rafael H. Schloming" Date: Wed, 25 Jul 2007 16:44:32 +0000 Subject: fixed Encoder/Decoder to do the property type conversion for unsigned types git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@559520 13f79535-47bb-0310-9956-ffa450edef68 --- java/common/generate | 9 +++-- .../main/java/org/apache/qpidity/BBDecoder.java | 40 ++++++++++++++++------ .../main/java/org/apache/qpidity/BBEncoder.java | 22 +++++++----- .../src/main/java/org/apache/qpidity/Decoder.java | 8 ++--- .../src/main/java/org/apache/qpidity/Encoder.java | 8 ++--- .../main/java/org/apache/qpidity/SizeEncoder.java | 8 ++--- 6 files changed, 59 insertions(+), 36 deletions(-) (limited to 'java/common') diff --git a/java/common/generate b/java/common/generate index 3bbece6bce..4a2e878685 100755 --- a/java/common/generate +++ b/java/common/generate @@ -50,16 +50,15 @@ TYPES = { "longstr": "String", "shortstr": "String", "longlong": "long", - "long": "int", - "short": "short", - "octet": "byte", + "long": "long", + "short": "int", + "octet": "short", "bit": "boolean", "table": "Map", "timestamp": "long", "content": "String", "uuid": "UUID", - "rfc1982-long-set": "Range[]", - "rfc1982-long": "int" + "rfc1982-long-set": "Range[]" } def camel(offset, *args): diff --git a/java/common/src/main/java/org/apache/qpidity/BBDecoder.java b/java/common/src/main/java/org/apache/qpidity/BBDecoder.java index 0a4c6ef063..9c5da34cd1 100644 --- a/java/common/src/main/java/org/apache/qpidity/BBDecoder.java +++ b/java/common/src/main/java/org/apache/qpidity/BBDecoder.java @@ -34,9 +34,25 @@ import java.util.UUID; class BBDecoder implements Decoder { + private static final short unsigned(byte b) + { + return (short) ((0x100 + b) & 0xFF); + } + + private static final int unsigned(short s) + { + return (0x10000 + s) & 0xFFFF; + } + + private static final long unsigned(int i) + { + return (0x1000000000L + i) & 0xFFFFFFFFL; + } + private final ByteBuffer in; - public BBDecoder(ByteBuffer in) { + public BBDecoder(ByteBuffer in) + { this.in = in; } @@ -46,19 +62,19 @@ class BBDecoder implements Decoder return false; } - public byte readOctet() + public short readOctet() { - throw new Error("TODO"); + return unsigned(in.get()); } - public short readShort() + public int readShort() { - return in.getShort(); + return unsigned(in.getShort()); } - public int readLong() + public long readLong() { - return in.getInt(); + return unsigned(in.getInt()); } public long readLonglong() @@ -74,7 +90,7 @@ class BBDecoder implements Decoder public String readShortstr() { - byte size = in.get(); + short size = readOctet(); byte[] bytes = new byte[size]; in.get(bytes); return new String(bytes); @@ -82,7 +98,11 @@ class BBDecoder implements Decoder public String readLongstr() { - throw new Error("TODO"); + long size = readLong(); + assert size <= Integer.MAX_VALUE; + byte[] bytes = new byte[(int) size]; + in.get(bytes); + return new String(bytes); } public Map readTable() @@ -91,7 +111,7 @@ class BBDecoder implements Decoder return null; } - public Range[] readRfc1982LongSet() + public Range[] readRfc1982LongSet() { throw new Error("TODO"); } diff --git a/java/common/src/main/java/org/apache/qpidity/BBEncoder.java b/java/common/src/main/java/org/apache/qpidity/BBEncoder.java index 36edf278f3..50b8659fd7 100644 --- a/java/common/src/main/java/org/apache/qpidity/BBEncoder.java +++ b/java/common/src/main/java/org/apache/qpidity/BBEncoder.java @@ -45,19 +45,22 @@ class BBEncoder implements Encoder //throw new Error("TODO"); } - public void writeOctet(byte b) + public void writeOctet(short b) { - out.put(b); + assert b < 0x100; + out.put((byte) b); } - public void writeShort(short s) + public void writeShort(int s) { - out.putShort(s); + assert s < 0x10000; + out.putShort((short) s); } - public void writeLong(int i) + public void writeLong(long i) { - out.putInt(i); + assert i < 0x100000000L; + out.putInt((int) i); } public void writeLonglong(long l) @@ -77,13 +80,14 @@ class BBEncoder implements Encoder if (s.length() > 255) { throw new IllegalArgumentException(s); } - writeOctet((byte) s.length()); + writeOctet((short) s.length()); out.put(s.getBytes()); } public void writeLongstr(String s) { - throw new Error("TODO"); + writeLong(s.length()); + out.put(s.getBytes()); } @@ -92,7 +96,7 @@ class BBEncoder implements Encoder //throw new Error("TODO"); } - public void writeRfc1982LongSet(Range[] ranges) + public void writeRfc1982LongSet(Range[] ranges) { throw new Error("TODO"); } diff --git a/java/common/src/main/java/org/apache/qpidity/Decoder.java b/java/common/src/main/java/org/apache/qpidity/Decoder.java index 5001d3ebee..26191fa7ba 100644 --- a/java/common/src/main/java/org/apache/qpidity/Decoder.java +++ b/java/common/src/main/java/org/apache/qpidity/Decoder.java @@ -33,9 +33,9 @@ public interface Decoder { boolean readBit(); - byte readOctet(); - short readShort(); - int readLong(); + short readOctet(); + int readShort(); + long readLong(); long readLonglong(); long readTimestamp(); @@ -44,7 +44,7 @@ public interface Decoder String readLongstr(); Map readTable(); - Range[] readRfc1982LongSet(); + Range[] readRfc1982LongSet(); UUID readUuid(); String readContent(); diff --git a/java/common/src/main/java/org/apache/qpidity/Encoder.java b/java/common/src/main/java/org/apache/qpidity/Encoder.java index 27360a551a..716df97397 100644 --- a/java/common/src/main/java/org/apache/qpidity/Encoder.java +++ b/java/common/src/main/java/org/apache/qpidity/Encoder.java @@ -33,9 +33,9 @@ public interface Encoder { void writeBit(boolean b); - void writeOctet(byte b); - void writeShort(short s); - void writeLong(int i); + void writeOctet(short b); + void writeShort(int s); + void writeLong(long i); void writeLonglong(long l); void writeTimestamp(long l); @@ -44,7 +44,7 @@ public interface Encoder void writeLongstr(String s); void writeTable(Map table); - void writeRfc1982LongSet(Range[] ranges); + void writeRfc1982LongSet(Range[] ranges); void writeUuid(UUID uuid); void writeContent(String c); diff --git a/java/common/src/main/java/org/apache/qpidity/SizeEncoder.java b/java/common/src/main/java/org/apache/qpidity/SizeEncoder.java index 53cc055e72..745f58fd6d 100644 --- a/java/common/src/main/java/org/apache/qpidity/SizeEncoder.java +++ b/java/common/src/main/java/org/apache/qpidity/SizeEncoder.java @@ -57,17 +57,17 @@ class SizeEncoder implements Encoder //throw new Error("TODO"); } - public void writeOctet(byte b) + public void writeOctet(short b) { size += 1; } - public void writeShort(short s) + public void writeShort(int s) { size += 2; } - public void writeLong(int i) + public void writeLong(long i) { size += 4; } @@ -104,7 +104,7 @@ class SizeEncoder implements Encoder //throw new Error("TODO"); } - public void writeRfc1982LongSet(Range[] ranges) + public void writeRfc1982LongSet(Range[] ranges) { throw new Error("TODO"); } -- cgit v1.2.1