1
0
Fork 0
mirror of https://github.com/codedread/bitjs synced 2025-10-03 09:39:16 +02:00

Fix bug with tee() so that endianness is also copied to teed stream.

This commit is contained in:
Jeff Schiller 2024-01-10 21:22:53 +09:00
parent 79c289afa1
commit 053d4bc127
2 changed files with 15 additions and 0 deletions

View file

@ -66,6 +66,11 @@ export class ByteStream {
this.littleEndian_ = true;
}
/** @returns {boolean} Whether the stream is little-endian. */
isLittleEndian() {
return this.littleEndian_;
}
/** Big-Endian is sometimes called Motorola-style. */
setBigEndian() {
this.littleEndian_ = false;
@ -78,6 +83,7 @@ export class ByteStream {
/**
* Returns how many bytes have been read in the stream since the beginning of time.
* @returns {number}
*/
getNumBytesRead() {
return this.bytesRead_;
@ -85,6 +91,7 @@ export class ByteStream {
/**
* Returns how many bytes are currently in the stream left to be read.
* @returns {number}
*/
getNumBytesLeft() {
const bytesInCurrentPage = (this.bytes.byteLength - this.ptr);
@ -334,6 +341,10 @@ export class ByteStream {
/**
* Creates a new ByteStream from this ByteStream that can be read / peeked.
* Note that the teed stream is a disconnected copy. If you push more bytes to the original
* stream, the copy does not get them.
* TODO: Assess whether the above causes more bugs than it avoids. (It would feel weird to me if
* the teed stream shared some state with the original stream.)
* @returns {ByteStream} A clone of this ByteStream.
*/
tee() {
@ -342,6 +353,7 @@ export class ByteStream {
clone.ptr = this.ptr;
clone.pages_ = this.pages_.slice();
clone.bytesRead_ = this.bytesRead_;
clone.littleEndian_ = this.littleEndian_;
return clone;
}
}

View file

@ -255,6 +255,8 @@ describe('bitjs.io.ByteStream', () => {
it('Tee', () => {
for (let i = 0; i < 4; ++i) array[i] = 65 + i;
const stream = new ByteStream(array.buffer);
// Set non-default endianness.
stream.setBigEndian(true);
const anotherArray = new Uint8Array(4);
for (let i = 0; i < 4; ++i) anotherArray[i] = 69 + i;
@ -265,5 +267,6 @@ describe('bitjs.io.ByteStream', () => {
teed.readBytes(5);
expect(stream.getNumBytesLeft()).equals(8);
expect(teed.getNumBytesLeft()).equals(3);
expect(teed.isLittleEndian()).equals(stream.isLittleEndian());
});
});