From d519c543a6abdcbaddaa920bcd1d71583d399121 Mon Sep 17 00:00:00 2001
From: akwizgran <akwizgran@users.sourceforge.net>
Date: Sat, 2 May 2015 21:12:33 +0100
Subject: [PATCH] Represent booleans with a single byte.

---
 .../src/org/briarproject/data/ReaderImpl.java      | 14 +++++---------
 briar-core/src/org/briarproject/data/Types.java    |  3 ++-
 .../src/org/briarproject/data/WriterImpl.java      | 12 ++++++------
 .../src/org/briarproject/data/ReaderImplTest.java  |  4 ++--
 .../src/org/briarproject/data/WriterImplTest.java  |  4 ++--
 5 files changed, 17 insertions(+), 20 deletions(-)

diff --git a/briar-core/src/org/briarproject/data/ReaderImpl.java b/briar-core/src/org/briarproject/data/ReaderImpl.java
index aadeb448c4..420ff25ed9 100644
--- a/briar-core/src/org/briarproject/data/ReaderImpl.java
+++ b/briar-core/src/org/briarproject/data/ReaderImpl.java
@@ -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;
 	}
 
diff --git a/briar-core/src/org/briarproject/data/Types.java b/briar-core/src/org/briarproject/data/Types.java
index ae64f49673..5f5dbc5c9f 100644
--- a/briar-core/src/org/briarproject/data/Types.java
+++ b/briar-core/src/org/briarproject/data/Types.java
@@ -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;
diff --git a/briar-core/src/org/briarproject/data/WriterImpl.java b/briar-core/src/org/briarproject/data/WriterImpl.java
index cd0d833f6d..e178bff9dd 100644
--- a/briar-core/src/org/briarproject/data/WriterImpl.java
+++ b/briar-core/src/org/briarproject/data/WriterImpl.java
@@ -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 {
diff --git a/briar-tests/src/org/briarproject/data/ReaderImplTest.java b/briar-tests/src/org/briarproject/data/ReaderImplTest.java
index 4fcd88949f..1b14d3c17e 100644
--- a/briar-tests/src/org/briarproject/data/ReaderImplTest.java
+++ b/briar-tests/src/org/briarproject/data/ReaderImplTest.java
@@ -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());
diff --git a/briar-tests/src/org/briarproject/data/WriterImplTest.java b/briar-tests/src/org/briarproject/data/WriterImplTest.java
index 3b3be5f491..05cf0875a4 100644
--- a/briar-tests/src/org/briarproject/data/WriterImplTest.java
+++ b/briar-tests/src/org/briarproject/data/WriterImplTest.java
@@ -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
-- 
GitLab