Warning: session_start(): open(/var/lib/php/sessions/sess_9n3jdi3am9msega7s48rsha9nh, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
set flag LeanMode.
set flag Reparse.
set flag KeepComments.
persistable sclass HuffmanByteArray is BitIO {
settable byte[] data;
gettable int[] histogram;
gettable HuffmanTreeMaker tm;
gettable new HuffmanTree tree;
// options
settable bool startWithMagicCode;
settable S magicCode = "HUF1";
*(byte[] *data) {}
public void readWrite(BitHead head) {
if (head.writeMode() && histogram == null) {
histogram = byteHistogramArray(data);
tm = new HuffmanTreeMaker;
tm.importByteHistogram(histogram);
tree = tm!;
}
// Part 1 (magic code)
if (startWithMagicCode)
head.exchangeASCII(magicCode);
// Part 2 (Huffman character tree)
tree.readWrite(head);
// Part 3a (size)
new VariableSizeUIntForBitHead().chunkSize(3).readWrite(head, -> data.length, size -> data = new byte[size]);
//print("length " + data.length);
// Part 3 (text)
if (head.writeMode()) {
fOr (b : data)
tree.writeCharacter(b, head);
}
if (head.readMode()) {
for i over data: {
if (head.isEOF()) break;
data[i] = toUByte(tree.readSymbol(head));
}
}
}
byte[] get() { ret data; }
// update selfType
public selfType fromByteArray(byte[] data) { BitIO.super.fromByteArray(data); this; }
public selfType load(byte[] data) { BitIO.super.load(data); this; }
}