WIP: added example

This commit is contained in:
Andrey Gumirov
2024-01-08 02:42:59 +07:00
parent 606ce553ac
commit 8780822f95
2 changed files with 63 additions and 46 deletions

View File

@ -1,3 +1,20 @@
# mashzip # mashzip
yet another gzip yet another gzip
Example:
```
Some long text!!!!\x01\x02\x03\x04
```
```hexdump
00000000: 4d41 5348 0554 4000 0000 0000 0000 0000 MASH.T@.........
00000010: 0000 0000 3300 0000 0000 0000 0000 0000 ....3...........
00000020: 0000 0000 0000 0000 0000 0000 0005 0000 ................
00000030: 0000 0000 0000 0404 0000 4544 0000 3000 ..........ED..0.
00000040: 4000 0000 0000 0000 0000 0000 0000 0000 @...............
00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00000080: 0000 0000 9e3f 4279 13c2 5692 f06e 07 .....?By..V..n.
```

View File

@ -193,56 +193,56 @@ using namespace std;
//// Huffman coding algorithm //// Huffman coding algorithm
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
// buildHuffmanTree(cin); // // buildHuffmanTree(cin);
// 10111010 11110101 // // 10111010 11110101
stringstream ss("\xba\xf5"); // stringstream ss("\xba\xf5");
ibitstream ibs(ss); // ibitstream ibs(ss);
// 10111010 11110101 // // 10111010 11110101
// ^^ // // ^^
int a = ibs.getbits(2); // int a = ibs.getbits(2);
cout << bitset<2>(a) << endl; // cout << bitset<2>(a) << endl;
// 10111010 11110101 // // 10111010 11110101
// ^^^^ // // ^^^^
int b = ibs.getbits(4); // int b = ibs.getbits(4);
cout << bitset<4>(b) << endl; // cout << bitset<4>(b) << endl;
// 10111010 11110101 // // 10111010 11110101
// ^^ ^^^^^^^ // // ^^ ^^^^^^^
b = ibs.getbits(9); // b = ibs.getbits(9);
cout << bitset<9>(b) << endl; // cout << bitset<9>(b) << endl;
// 10111010 11110101 // // 10111010 11110101
// ^ + overflow // // ^ + overflow
try { // try {
b = ibs.getbits(10); // b = ibs.getbits(10);
cout << b << endl; // cout << b << endl;
} catch (std::runtime_error &e) { // } catch (std::runtime_error &e) {
cout << "Got runtime error: " << e.what() << endl; // cout << "Got runtime error: " << e.what() << endl;
} // }
ostringstream so("bits: "); // ostringstream so("bits: ");
obitstream obs(so); // obitstream obs(so);
obs.writebits(0xf, 3); // obs.writebits(0xf, 3);
cout << "After 3 bits: " << so.str() << endl; // cout << "After 3 bits: " << so.str() << endl;
// cache here: 00000111 // // cache here: 00000111
obs.writebits(0xf5, 7); // obs.writebits(0xf5, 7);
// here: Flush: 10101111 // // here: Flush: 10101111
cout << "After 7 bits: " << so.str() << endl; // cout << "After 7 bits: " << so.str() << endl;
obs.flush(); // obs.flush();
// here: Flush: 00000011 // // here: Flush: 00000011
cout << "After flush: " << so.str() << endl; // cout << "After flush: " << so.str() << endl;
obs.writebits(0xbeef, 16); // obs.writebits(0xbeef, 16);
cout << "After 0xbeef: " << so.str() << endl; // cout << "After 0xbeef: " << so.str() << endl;
obs.flush(); // obs.flush();
// here: Flush: 0xEFBE - reversed! // // here: Flush: 0xEFBE - reversed!
cout << "After flush: " << so.str() << endl; // cout << "After flush: " << so.str() << endl;
string s = "Some long text!!!!\x01\x02\x03\x04"; string s = "Some long text!!!!\x01\x02\x03\x04";
@ -252,10 +252,10 @@ int main(int argc, char **argv)
HuffmanTable ht(ss1); HuffmanTable ht(ss1);
uint8_t *header = ht.to_header(); uint8_t *header = ht.to_header();
for (size_t i = 0; i < 128; i++) // for (size_t i = 0; i < 128; i++)
{ // {
cout << "Code for " << 2 * i << " and " << 2 * i + 1 << ": " << bitset<8>(header[i]) << endl; // cout << "Code for " << 2 * i << " and " << 2 * i + 1 << ": " << bitset<8>(header[i]) << endl;
} // }
ostringstream test; ostringstream test;
@ -272,7 +272,7 @@ int main(int argc, char **argv)
} }
some_stream.flush(); some_stream.flush();
std::cout << "Coding result: " << test.str() << endl; std::cout << test.str();
return 0; return 0;
} }