Renamed BdfWriter methods, added support for NULL_VALUE.

This commit is contained in:
akwizgran
2016-02-29 14:18:31 +00:00
parent 3ce62818aa
commit 9e0add7d4c
9 changed files with 56 additions and 53 deletions

View File

@@ -11,8 +11,8 @@ public interface BdfWriter {
void writeNull() throws IOException;
void writeBoolean(boolean b) throws IOException;
void writeInteger(long l) throws IOException;
void writeFloat(double d) throws IOException;
void writeLong(long l) throws IOException;
void writeDouble(double d) throws IOException;
void writeString(String s) throws IOException;
void writeRaw(byte[] b) throws IOException;

View File

@@ -11,6 +11,7 @@ import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
import static org.briarproject.data.Types.DICTIONARY;
import static org.briarproject.data.Types.END;
import static org.briarproject.data.Types.FALSE;
@@ -55,7 +56,7 @@ class BdfWriterImpl implements BdfWriter {
else out.write(FALSE);
}
public void writeInteger(long i) throws IOException {
public void writeLong(long i) throws IOException {
if (i >= Byte.MIN_VALUE && i <= Byte.MAX_VALUE) {
out.write(INT_8);
out.write((byte) i);
@@ -94,7 +95,7 @@ class BdfWriterImpl implements BdfWriter {
out.write((byte) ((i << 56) >> 56));
}
public void writeFloat(double d) throws IOException {
public void writeDouble(double d) throws IOException {
out.write(FLOAT_64);
writeInt64(Double.doubleToRawLongBits(d));
}
@@ -135,14 +136,14 @@ class BdfWriterImpl implements BdfWriter {
}
private void writeObject(Object o) throws IOException {
if (o == null) writeNull();
if (o == null || o == NULL_VALUE) writeNull();
else if (o instanceof Boolean) writeBoolean((Boolean) o);
else if (o instanceof Byte) writeInteger((Byte) o);
else if (o instanceof Short) writeInteger((Short) o);
else if (o instanceof Integer) writeInteger((Integer) o);
else if (o instanceof Long) writeInteger((Long) o);
else if (o instanceof Float) writeFloat((Float) o);
else if (o instanceof Double) writeFloat((Double) o);
else if (o instanceof Byte) writeLong((Byte) o);
else if (o instanceof Short) writeLong((Short) o);
else if (o instanceof Integer) writeLong((Integer) o);
else if (o instanceof Long) writeLong((Long) o);
else if (o instanceof Float) writeDouble((Float) o);
else if (o instanceof Double) writeDouble((Double) o);
else if (o instanceof String) writeString((String) o);
else if (o instanceof byte[]) writeRaw((byte[]) o);
else if (o instanceof Bytes) writeRaw(((Bytes) o).getBytes());

View File

@@ -77,7 +77,7 @@ class ForumPostFactoryImpl implements ForumPostFactory {
BdfWriter w = bdfWriterFactory.createWriter(out);
w.writeListStart();
w.writeRaw(groupId.getBytes());
w.writeInteger(timestamp);
w.writeLong(timestamp);
if (parent == null) w.writeNull();
else w.writeRaw(parent.getBytes());
writeAuthor(w, author);

View File

@@ -117,7 +117,7 @@ class ForumPostValidator implements MessageValidator {
BdfWriter w = bdfWriterFactory.createWriter(out);
w.writeListStart();
w.writeRaw(m.getGroupId().getBytes());
w.writeInteger(m.getTimestamp());
w.writeLong(m.getTimestamp());
if (parent == null) w.writeNull();
else w.writeRaw(parent.getBytes());
writeAuthor(w, author);

View File

@@ -387,7 +387,7 @@ class ForumSharingManagerImpl implements ForumSharingManager, AddContactHook,
BdfWriter w = bdfWriterFactory.createWriter(out);
try {
w.writeListStart();
w.writeInteger(version);
w.writeLong(version);
w.writeListStart();
for (Forum f : forums) {
w.writeListStart();

View File

@@ -196,7 +196,7 @@ abstract class Connector extends Thread {
protected void sendTimestamp(BdfWriter w, long timestamp)
throws IOException {
w.writeInteger(timestamp);
w.writeLong(timestamp);
w.flush();
if (LOG.isLoggable(INFO)) LOG.info(pluginName + " sent timestamp");
}

View File

@@ -288,7 +288,7 @@ class TransportPropertyManagerImpl implements TransportPropertyManager,
w.writeListStart();
w.writeRaw(dev.getBytes());
w.writeString(t.getString());
w.writeInteger(version);
w.writeLong(version);
w.writeDictionary(p);
w.writeListEnd();
} catch (IOException e) {

View File

@@ -57,7 +57,7 @@ public class BdfReaderImplTest extends BriarTestCase {
}
@Test
public void testReadInt8() throws Exception {
public void testReadLong8() throws Exception {
setContents("21" + "00" + "21" + "FF"
+ "21" + "7F" + "21" + "80");
assertEquals(0, r.readLong());
@@ -68,14 +68,14 @@ public class BdfReaderImplTest extends BriarTestCase {
}
@Test
public void testSkipInt8() throws Exception {
public void testSkipLong8() throws Exception {
setContents("21" + "00");
r.skipLong();
assertTrue(r.eof());
}
@Test
public void testReadInt16() throws Exception {
public void testReadLong16() throws Exception {
setContents("22" + "0080" + "22" + "FF7F"
+ "22" + "7FFF" + "22" + "8000");
assertEquals(Byte.MAX_VALUE + 1, r.readLong());
@@ -86,14 +86,14 @@ public class BdfReaderImplTest extends BriarTestCase {
}
@Test
public void testSkipInt16() throws Exception {
public void testSkipLong16() throws Exception {
setContents("22" + "0080");
r.skipLong();
assertTrue(r.eof());
}
@Test
public void testReadInt32() throws Exception {
public void testReadLong32() throws Exception {
setContents("24" + "00008000" + "24" + "FFFF7FFF"
+ "24" + "7FFFFFFF" + "24" + "80000000");
assertEquals(Short.MAX_VALUE + 1, r.readLong());
@@ -104,14 +104,14 @@ public class BdfReaderImplTest extends BriarTestCase {
}
@Test
public void testSkipInt32() throws Exception {
public void testSkipLong32() throws Exception {
setContents("24" + "00008000");
r.skipLong();
assertTrue(r.eof());
}
@Test
public void testReadInt64() throws Exception {
public void testReadLong64() throws Exception {
setContents("28" + "0000000080000000" + "28" + "FFFFFFFF7FFFFFFF"
+ "28" + "7FFFFFFFFFFFFFFF" + "28" + "8000000000000000");
assertEquals(Integer.MAX_VALUE + 1L, r.readLong());
@@ -122,14 +122,14 @@ public class BdfReaderImplTest extends BriarTestCase {
}
@Test
public void testSkipInt64() throws Exception {
public void testSkipLong() throws Exception {
setContents("28" + "0000000080000000");
r.skipLong();
assertTrue(r.eof());
}
@Test
public void testReadFloat() throws Exception {
public void testReadDouble() throws Exception {
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
// http://steve.hollasch.net/cgindex/coding/ieeefloat.html
setContents("38" + "0000000000000000" + "38" + "3FF0000000000000"

View File

@@ -13,6 +13,7 @@ import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import static org.briarproject.api.data.BdfDictionary.NULL_VALUE;
import static org.junit.Assert.assertArrayEquals;
public class BdfWriterImplTest extends BriarTestCase {
@@ -41,17 +42,17 @@ public class BdfWriterImplTest extends BriarTestCase {
}
@Test
public void testWriteInteger() throws IOException {
w.writeInteger(0);
w.writeInteger(-1);
w.writeInteger(Byte.MAX_VALUE);
w.writeInteger(Byte.MIN_VALUE);
w.writeInteger(Short.MAX_VALUE);
w.writeInteger(Short.MIN_VALUE);
w.writeInteger(Integer.MAX_VALUE);
w.writeInteger(Integer.MIN_VALUE);
w.writeInteger(Long.MAX_VALUE);
w.writeInteger(Long.MIN_VALUE);
public void testWriteLong() throws IOException {
w.writeLong(0);
w.writeLong(-1);
w.writeLong(Byte.MAX_VALUE);
w.writeLong(Byte.MIN_VALUE);
w.writeLong(Short.MAX_VALUE);
w.writeLong(Short.MIN_VALUE);
w.writeLong(Integer.MAX_VALUE);
w.writeLong(Integer.MIN_VALUE);
w.writeLong(Long.MAX_VALUE);
w.writeLong(Long.MIN_VALUE);
// INTEGER_8 tag, 0, INTEGER_8 tag, -1, etc
checkContents("21" + "00" + "21" + "FF" +
"21" + "7F" + "21" + "80" +
@@ -61,17 +62,17 @@ public class BdfWriterImplTest extends BriarTestCase {
}
@Test
public void testWriteFloat() throws IOException {
public void testWriteDouble() throws IOException {
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
// 1 bit for sign, 11 for exponent, 52 for significand
w.writeFloat(0.0); // 0 0 0 -> 0x0000000000000000
w.writeFloat(1.0); // 0 1023 1 -> 0x3FF0000000000000
w.writeFloat(2.0); // 0 1024 1 -> 0x4000000000000000
w.writeFloat(-1.0); // 1 1023 1 -> 0xBFF0000000000000
w.writeFloat(-0.0); // 1 0 0 -> 0x8000000000000000
w.writeFloat(Double.NEGATIVE_INFINITY); // 1 2047 0 -> 0xFFF00000...
w.writeFloat(Double.POSITIVE_INFINITY); // 0 2047 0 -> 0x7FF00000...
w.writeFloat(Double.NaN); // 0 2047 1 -> 0x7FF8000000000000
w.writeDouble(0.0); // 0 0 0 -> 0x0000000000000000
w.writeDouble(1.0); // 0 1023 1 -> 0x3FF0000000000000
w.writeDouble(2.0); // 0 1024 1 -> 0x4000000000000000
w.writeDouble(-1.0); // 1 1023 1 -> 0xBFF0000000000000
w.writeDouble(-0.0); // 1 0 0 -> 0x8000000000000000
w.writeDouble(Double.NEGATIVE_INFINITY); // 1 2047 0 -> 0xFFF00000...
w.writeDouble(Double.POSITIVE_INFINITY); // 0 2047 0 -> 0x7FF00000...
w.writeDouble(Double.NaN); // 0 2047 1 -> 0x7FF8000000000000
checkContents("38" + "0000000000000000" + "38" + "3FF0000000000000"
+ "38" + "4000000000000000" + "38" + "BFF0000000000000"
+ "38" + "8000000000000000" + "38" + "FFF0000000000000"
@@ -122,7 +123,7 @@ public class BdfWriterImplTest extends BriarTestCase {
}
@Test
public void testWriteBytes8() throws IOException {
public void testWriteRaw8() throws IOException {
byte[] longest = new byte[Byte.MAX_VALUE];
String longHex = StringUtils.toHexString(longest);
w.writeRaw(new byte[] {1, 2, 3});
@@ -132,7 +133,7 @@ public class BdfWriterImplTest extends BriarTestCase {
}
@Test
public void testWriteBytes16() throws IOException {
public void testWriteRaw16() throws IOException {
byte[] shortest = new byte[Byte.MAX_VALUE + 1];
String shortHex = StringUtils.toHexString(shortest);
byte[] longest = new byte[Short.MAX_VALUE];
@@ -144,7 +145,7 @@ public class BdfWriterImplTest extends BriarTestCase {
}
@Test
public void testWriteBytes32() throws IOException {
public void testWriteRaw32() throws IOException {
byte[] shortest = new byte[Short.MAX_VALUE + 1];
String shortHex = StringUtils.toHexString(shortest);
w.writeRaw(shortest);
@@ -166,10 +167,11 @@ public class BdfWriterImplTest extends BriarTestCase {
List<Object> l = new ArrayList<Object>();
l.add(1);
l.add(null);
l.add(NULL_VALUE);
l.add(2);
w.writeList(l);
// LIST tag, 1 as integer, NULL tag, 2 as integer, END tag
checkContents("60" + "21" + "01" + "00" + "21" + "02" + "80");
// LIST tag, 1 as integer, NULL tag, NULL tag, 2 as integer, END tag
checkContents("60" + "21" + "01" + "00" + "00" + "21" + "02" + "80");
}
@Test
@@ -188,9 +190,9 @@ public class BdfWriterImplTest extends BriarTestCase {
@Test
public void testWriteDelimitedList() throws IOException {
w.writeListStart();
w.writeInteger(1);
w.writeLong(1);
w.writeString("foo");
w.writeInteger(128);
w.writeLong(128);
w.writeListEnd();
// LIST tag, 1 as integer, "foo" as string, 128 as integer, END tag
checkContents("60" + "21" + "01" +
@@ -202,7 +204,7 @@ public class BdfWriterImplTest extends BriarTestCase {
public void testWriteDelimitedDictionary() throws IOException {
w.writeDictionaryStart();
w.writeString("foo");
w.writeInteger(123);
w.writeLong(123);
w.writeString("bar");
w.writeNull();
w.writeDictionaryEnd();