compound-binary-file-js
Version:
This is an implementation of [Compound Binary File v.3](https://docs.microsoft.com/en-us/openspecs/windows_protocols/ms-cfb/53989ce4-7b05-4f8d-829b-d08d6148375b) \ Allows reading existing files, creation of the/write operation
49 lines (39 loc) • 1.73 kB
text/typescript
import {StreamRW} from "./StreamRW";
export class StreamHolder {
private readonly regularStreamRW: StreamRW;
private readonly miniStreamRW: StreamRW;
private readonly sizeThreshold: number;
constructor(regularStreamRW: StreamRW, miniStreamRW: StreamRW, sizeThreshold: number) {
this.regularStreamRW = regularStreamRW;
this.miniStreamRW = miniStreamRW;
this.sizeThreshold = sizeThreshold;
}
private forSize(size: number): StreamRW {
if(size >= this.sizeThreshold) {
return this.regularStreamRW;
} else {
return this.miniStreamRW;
}
}
getStreamData(startingLocation: number, size: number): number[] {
return this.forSize(size).read(startingLocation, size);
}
setStreamData(data: number[]): number {
return this.forSize(data.length).write(data);
}
read(startingLocation: number, size: number, fromIncl: number, toExcl: number): number[] {
return this.forSize(size).read(startingLocation, fromIncl, toExcl);
}
writeAt(startingLocation: number, size: number, position: number, data: number[]): void {
this.forSize(size).writeAt(startingLocation, position, data);
}
append(startingLocation: number, size: number, data: number[]): number {
if(size < this.sizeThreshold && size + data.length >= this.sizeThreshold) {
const result = this.forSize(size).read(startingLocation, size);
result.push(...data);
return this.forSize(size + data.length).write(result);
} else {
return this.forSize(size).append(startingLocation, size, data);
}
}
}