Represent booleans with a single byte.

This commit is contained in:
akwizgran
2015-05-02 21:12:33 +01:00
parent 41c4c4d808
commit d519c543a6
5 changed files with 17 additions and 20 deletions

View File

@@ -1,6 +1,7 @@
package org.briarproject.data;
import static org.briarproject.data.Types.END;
import static org.briarproject.data.Types.FALSE;
import static org.briarproject.data.Types.FLOAT_64;
import static org.briarproject.data.Types.INT_16;
import static org.briarproject.data.Types.INT_32;
@@ -15,6 +16,7 @@ import static org.briarproject.data.Types.RAW_8;
import static org.briarproject.data.Types.STRING_16;
import static org.briarproject.data.Types.STRING_32;
import static org.briarproject.data.Types.STRING_8;
import static org.briarproject.data.Types.TRUE;
import java.io.IOException;
import java.io.InputStream;
@@ -133,24 +135,18 @@ class ReaderImpl implements Reader {
public boolean hasBoolean() throws IOException {
if(!hasLookahead) readLookahead();
if(eof) return false;
return next == Types.BOOLEAN;
return next == FALSE || next == TRUE;
}
public boolean readBoolean() throws IOException {
if(!hasBoolean()) throw new FormatException();
boolean bool = next == TRUE;
consumeLookahead();
return readBoolean(true);
}
private boolean readBoolean(boolean consume) throws IOException {
readIntoBuffer(1, consume);
if(buf[0] != 0 && buf[0] != 1) throw new FormatException();
return buf[0] == 1;
return bool;
}
public void skipBoolean() throws IOException {
if(!hasBoolean()) throw new FormatException();
skip(1);
hasLookahead = false;
}

View File

@@ -3,7 +3,8 @@ package org.briarproject.data;
interface Types {
byte NULL = 0x00;
byte BOOLEAN = 0x11;
byte FALSE = 0x10;
byte TRUE = 0x11;
byte INT_8 = 0x21;
byte INT_16 = 0x22;
byte INT_32 = 0x24;

View File

@@ -1,7 +1,7 @@
package org.briarproject.data;
import static org.briarproject.data.Types.BOOLEAN;
import static org.briarproject.data.Types.END;
import static org.briarproject.data.Types.FALSE;
import static org.briarproject.data.Types.FLOAT_64;
import static org.briarproject.data.Types.INT_16;
import static org.briarproject.data.Types.INT_32;
@@ -16,6 +16,7 @@ import static org.briarproject.data.Types.RAW_8;
import static org.briarproject.data.Types.STRING_16;
import static org.briarproject.data.Types.STRING_32;
import static org.briarproject.data.Types.STRING_8;
import static org.briarproject.data.Types.TRUE;
import java.io.IOException;
import java.io.OutputStream;
@@ -60,9 +61,8 @@ class WriterImpl implements Writer {
}
public void writeBoolean(boolean b) throws IOException {
write(BOOLEAN);
if(b) write((byte) 1);
else write((byte) 0);
if(b) write(TRUE);
else write(FALSE);
}
public void writeInteger(long i) throws IOException {
@@ -139,9 +139,9 @@ class WriterImpl implements Writer {
}
public void writeList(Collection<?> c) throws IOException {
write(Types.LIST);
write(LIST);
for(Object o : c) writeObject(o);
write(Types.END);
write(END);
}
private void writeObject(Object o) throws IOException {

View File

@@ -37,7 +37,7 @@ public class ReaderImplTest extends BriarTestCase {
@Test
public void testReadBoolean() throws Exception {
setContents("11" + "00" + "11" + "01");
setContents("10" + "11");
assertFalse(r.readBoolean());
assertTrue(r.readBoolean());
assertTrue(r.eof());
@@ -45,7 +45,7 @@ public class ReaderImplTest extends BriarTestCase {
@Test
public void testSkipBoolean() throws Exception {
setContents("11" + "00" + "11" + "01");
setContents("10" + "11");
r.skipBoolean();
r.skipBoolean();
assertTrue(r.eof());

View File

@@ -36,8 +36,8 @@ public class WriterImplTest extends BriarTestCase {
public void testWriteBoolean() throws IOException {
w.writeBoolean(true);
w.writeBoolean(false);
// BOOLEAN tag, 1, BOOLEAN tag, 0
checkContents("11" + "01" + "11" + "00");
// TRUE tag, FALSE tag
checkContents("11" + "10");
}
@Test