#ifndef TANS_H #define TANS_H #include #include #include #include #include #include #include #include #define TANS_TABLE_SIZE 64 struct DecodeCol { int state; unsigned char symbol; int y; int k; }; struct EncodeHelper { unsigned char symbol; std::vector states; std::vector yVals; std::vector kVals; std::vector yPrimVals; int currentRepeat = 0; int currentIndex = 0; }; struct EncodeSymbolData { unsigned char symbol; int nextState; int streamValue; int numBits; }; struct EncodeCol { int state; std::vector symbols; }; struct EncodedData { int initialState; std::vector bitStream; }; std::vector createDecodingTable(std::vector symbols, std::vector frequencies); std::vector createEncodingTable(std::vector decodeTable, std::vector symbols); EncodedData encodeData(std::vector input, std::vector encodingTable); std::vector decodeData(EncodedData *data, std::vector decodeTable, int numChars); std::vector normalizeCounts(std::vector counts, int tableSize); std::vector normalizeCounts(std::vector counts, int tableSize, bool fillZeros); void printEncodeTable(std::vector encodeTable, std::vector symbols); void printDecodeTable(std::vector decodeTable); int getFileSize(std::string filePath); int encodeSingleSymbol(EncodeCol currEncodeCol, unsigned char symbol, std::vector *bitstream); #endif