mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 06:39:54 +01:00
Add BdfReader methods for 32-bit ints.
We use these a lot so it's convenient to have built-in support. Also make BdfReaderImpl and BdfWriterImpl final to enable compiler optimisations.
This commit is contained in:
@@ -32,6 +32,12 @@ public interface BdfReader {
|
|||||||
|
|
||||||
void skipLong() throws IOException;
|
void skipLong() throws IOException;
|
||||||
|
|
||||||
|
boolean hasInt() throws IOException;
|
||||||
|
|
||||||
|
int readInt() throws IOException;
|
||||||
|
|
||||||
|
void skipInt() throws IOException;
|
||||||
|
|
||||||
boolean hasDouble() throws IOException;
|
boolean hasDouble() throws IOException;
|
||||||
|
|
||||||
double readDouble() throws IOException;
|
double readDouble() throws IOException;
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ import static org.briarproject.bramble.util.StringUtils.fromUtf8;
|
|||||||
|
|
||||||
@NotThreadSafe
|
@NotThreadSafe
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
class BdfReaderImpl implements BdfReader {
|
final class BdfReaderImpl implements BdfReader {
|
||||||
|
|
||||||
private static final byte[] EMPTY_BUFFER = new byte[0];
|
private static final byte[] EMPTY_BUFFER = new byte[0];
|
||||||
|
|
||||||
@@ -232,6 +232,31 @@ class BdfReaderImpl implements BdfReader {
|
|||||||
hasLookahead = false;
|
hasLookahead = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean hasInt() throws IOException {
|
||||||
|
if (!hasLookahead) readLookahead();
|
||||||
|
if (eof) return false;
|
||||||
|
return next == INT_8 || next == INT_16 || next == INT_32;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int readInt() throws IOException {
|
||||||
|
if (!hasInt()) throw new FormatException();
|
||||||
|
hasLookahead = false;
|
||||||
|
if (next == INT_8) return readInt8();
|
||||||
|
if (next == INT_16) return readInt16();
|
||||||
|
return readInt32();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void skipInt() throws IOException {
|
||||||
|
if (!hasInt()) throw new FormatException();
|
||||||
|
if (next == INT_8) skip(1);
|
||||||
|
else if (next == INT_16) skip(2);
|
||||||
|
else skip(4);
|
||||||
|
hasLookahead = false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean hasDouble() throws IOException {
|
public boolean hasDouble() throws IOException {
|
||||||
if (!hasLookahead) readLookahead();
|
if (!hasLookahead) readLookahead();
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ import static org.briarproject.bramble.util.StringUtils.UTF_8;
|
|||||||
|
|
||||||
@NotThreadSafe
|
@NotThreadSafe
|
||||||
@NotNullByDefault
|
@NotNullByDefault
|
||||||
class BdfWriterImpl implements BdfWriter {
|
final class BdfWriterImpl implements BdfWriter {
|
||||||
|
|
||||||
private final OutputStream out;
|
private final OutputStream out;
|
||||||
|
|
||||||
|
|||||||
@@ -162,12 +162,35 @@ public class BdfReaderImplTest extends BrambleTestCase {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSkipLong() throws Exception {
|
public void testSkipLong64() throws Exception {
|
||||||
setContents("28" + "0000000080000000");
|
setContents("28" + "0000000080000000");
|
||||||
r.skipLong();
|
r.skipLong();
|
||||||
assertTrue(r.eof());
|
assertTrue(r.eof());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testReadInt() throws Exception {
|
||||||
|
setContents("21" + "7F" + "21" + "80"
|
||||||
|
+ "22" + "7FFF" + "22" + "8000"
|
||||||
|
+ "24" + "7FFFFFFF" + "24" + "80000000");
|
||||||
|
assertEquals(Byte.MAX_VALUE, r.readInt());
|
||||||
|
assertEquals(Byte.MIN_VALUE, r.readInt());
|
||||||
|
assertEquals(Short.MAX_VALUE, r.readInt());
|
||||||
|
assertEquals(Short.MIN_VALUE, r.readInt());
|
||||||
|
assertEquals(Integer.MAX_VALUE, r.readInt());
|
||||||
|
assertEquals(Integer.MIN_VALUE, r.readInt());
|
||||||
|
assertTrue(r.eof());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSkipInt() throws Exception {
|
||||||
|
setContents("21" + "7F" + "22" + "7FFF" + "24" + "7FFFFFFF");
|
||||||
|
r.skipInt();
|
||||||
|
r.skipInt();
|
||||||
|
r.skipInt();
|
||||||
|
assertTrue(r.eof());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testReadDouble() throws Exception {
|
public void testReadDouble() throws Exception {
|
||||||
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
|
// http://babbage.cs.qc.edu/IEEE-754/Decimal.html
|
||||||
|
|||||||
Reference in New Issue
Block a user