mirror of
https://github.com/corda/corda.git
synced 2025-01-07 13:38:47 +00:00
Swap the directionality of the links in Cell.
This commit is contained in:
parent
0537cb4775
commit
a5ff62fbad
@ -13,7 +13,8 @@ package java.io;
|
|||||||
public class ByteArrayOutputStream extends OutputStream {
|
public class ByteArrayOutputStream extends OutputStream {
|
||||||
private static final int BufferSize = 32;
|
private static final int BufferSize = 32;
|
||||||
|
|
||||||
private Cell chain;
|
private Cell firstCell;
|
||||||
|
private Cell curCell;
|
||||||
private int length;
|
private int length;
|
||||||
private byte[] buffer;
|
private byte[] buffer;
|
||||||
private int position;
|
private int position;
|
||||||
@ -25,7 +26,8 @@ public class ByteArrayOutputStream extends OutputStream {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void reset() {
|
public void reset() {
|
||||||
chain = null;
|
firstCell = null;
|
||||||
|
curCell = null;
|
||||||
length = 0;
|
length = 0;
|
||||||
buffer = null;
|
buffer = null;
|
||||||
position = 0;
|
position = 0;
|
||||||
@ -69,19 +71,30 @@ public class ByteArrayOutputStream extends OutputStream {
|
|||||||
position += length;
|
position += length;
|
||||||
} else {
|
} else {
|
||||||
flushBuffer();
|
flushBuffer();
|
||||||
chain = new Cell(copy(b, offset, length), 0, length, chain);
|
chainCell( new Cell(copy(b, offset, length), 0, length) );
|
||||||
}
|
}
|
||||||
|
|
||||||
this.length += length;
|
this.length += length;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void chainCell(Cell cell){
|
||||||
|
if (curCell == null){
|
||||||
|
firstCell = cell;
|
||||||
|
curCell = cell;
|
||||||
|
}else{
|
||||||
|
curCell.next = cell;
|
||||||
|
curCell = cell;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void flushBuffer() {
|
private void flushBuffer() {
|
||||||
if (position > 0) {
|
if (position > 0) {
|
||||||
byte[] b = buffer;
|
byte[] b = buffer;
|
||||||
int p = position;
|
int p = position;
|
||||||
buffer = null;
|
buffer = null;
|
||||||
position = 0;
|
position = 0;
|
||||||
chain = new Cell(b, 0, p, chain);
|
|
||||||
|
chainCell( new Cell(b, 0, p) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -89,33 +102,24 @@ public class ByteArrayOutputStream extends OutputStream {
|
|||||||
flushBuffer();
|
flushBuffer();
|
||||||
|
|
||||||
byte[] array = new byte[length];
|
byte[] array = new byte[length];
|
||||||
int index = length;
|
int pos = 0;
|
||||||
for (Cell c = chain; c != null; c = c.next) {
|
for (Cell c = firstCell; c != null; c = c.next) {
|
||||||
int start = index - c.length;
|
System.arraycopy(c.array, c.offset, array, pos, c.length);
|
||||||
System.arraycopy(c.array, c.offset, array, start, c.length);
|
pos += c.length;
|
||||||
index = start;
|
|
||||||
}
|
}
|
||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
public synchronized void writeTo(OutputStream out) throws IOException {
|
public synchronized void writeTo(OutputStream out) throws IOException {
|
||||||
if (length==0)
|
if (length==0) return;
|
||||||
return;
|
|
||||||
|
if (out == null){
|
||||||
|
throw new NullPointerException();
|
||||||
|
}
|
||||||
|
|
||||||
flushBuffer();
|
flushBuffer();
|
||||||
|
|
||||||
int cnt = 0;
|
for (Cell c = firstCell; c != null; c = c.next) {
|
||||||
for (Cell c = chain; c != null; c = c.next) {
|
|
||||||
cnt++;
|
|
||||||
}
|
|
||||||
|
|
||||||
Cell[] cellArray = new Cell[cnt];
|
|
||||||
|
|
||||||
for (Cell c = chain; c != null; c = c.next) {
|
|
||||||
cellArray[--cnt] = c;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (Cell c : cellArray){
|
|
||||||
out.write(c.array, c.offset, c.length);
|
out.write(c.array, c.offset, c.length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -133,13 +137,12 @@ public class ByteArrayOutputStream extends OutputStream {
|
|||||||
public byte[] array;
|
public byte[] array;
|
||||||
public int offset;
|
public int offset;
|
||||||
public int length;
|
public int length;
|
||||||
public Cell next;
|
public Cell next = null;
|
||||||
|
|
||||||
public Cell(byte[] array, int offset, int length, Cell next) {
|
public Cell(byte[] array, int offset, int length) {
|
||||||
this.array = array;
|
this.array = array;
|
||||||
this.offset = offset;
|
this.offset = offset;
|
||||||
this.length = length;
|
this.length = length;
|
||||||
this.next = next;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user