From 5196201220c714ea738d31d020196da188fca15f Mon Sep 17 00:00:00 2001 From: DevlTz Date: Sun, 12 Oct 2025 01:00:23 -0300 Subject: [PATCH 1/5] feat(compressor/decompressor): Implementando o compressor/descompressor - alterando algumas coisas importantes para o projeto rodar. --- CMakeLists.txt | 8 +- code_test.cpp | 15 +++ code_test.txt | 3 + codigo_comprimido.huff | Bin 0 -> 306 bytes codigo_restaurado.cpp | 15 +++ compressor | Bin 0 -> 214048 bytes contador_frequencia | Bin 0 -> 217624 bytes examples/small_texts/README.md | 7 +- include/compressor/compressor.h | 18 +++ src/compressor/compressor.cpp | 209 ++++++++++++++++++++++++++++++++ src/compressor/main.cpp | 67 +++++++--- src/freq_counter/main.cpp | 27 ++++- src/lib/huffman_tree.cpp | 4 +- tabela_cpp.freq | 53 ++++++++ 14 files changed, 404 insertions(+), 22 deletions(-) create mode 100644 code_test.cpp create mode 100644 code_test.txt create mode 100644 codigo_comprimido.huff create mode 100644 codigo_restaurado.cpp create mode 100644 compressor create mode 100644 contador_frequencia create mode 100644 include/compressor/compressor.h create mode 100644 src/compressor/compressor.cpp create mode 100644 tabela_cpp.freq diff --git a/CMakeLists.txt b/CMakeLists.txt index 0fe4511..1f71572 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -5,7 +5,13 @@ set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) add_executable(freq_counter src/freq_counter/main.cpp src/lib/utils.cpp) -add_executable(compressor src/compressor/main.cpp src/lib/huffman_tree.cpp src/lib/bit_stream.cpp src/lib/utils.cpp) +add_executable(compressor + src/compressor/main.cpp + src/compressor/compressor.cpp + src/lib/huffman_tree.cpp + src/lib/bit_stream.cpp + src/lib/utils.cpp +) target_include_directories(freq_counter PRIVATE ${CMAKE_SOURCE_DIR}/include) target_include_directories(compressor PRIVATE ${CMAKE_SOURCE_DIR}/include) diff --git a/code_test.cpp b/code_test.cpp new file mode 100644 index 0000000..012a6d3 --- /dev/null +++ b/code_test.cpp @@ -0,0 +1,15 @@ +#include +#include + +// Um loop simples para testar palavras-chave +int main() { + std::vector vec; + for (int i = 0; i < 10; ++i) { + vec.push_back(i); + } + + if (!vec.empty()) { + std::cout << "O vetor nao esta vazio!" << std::endl; + } + return 0; +} \ No newline at end of file diff --git a/code_test.txt b/code_test.txt new file mode 100644 index 0000000..d637def --- /dev/null +++ b/code_test.txt @@ -0,0 +1,3 @@ +O algoritmo de Huffman é um método de compressão de dados sem perdas. +A ideia é usar a frequência dos símbolos para criar uma codificação de tamanho variável. +Símbolos mais frequentes recebem códigos mais curtos, e símbolos raros recebem códigos mais longos. Que funcione agora pelo amor de DEUSSSSSSSSSSSS diff --git a/codigo_comprimido.huff b/codigo_comprimido.huff new file mode 100644 index 0000000000000000000000000000000000000000..4dd3575c0decb25dc821d26172b38492800072d9 GIT binary patch literal 306 zcmV-20nPpd1;GI@LK<7#-5i-%TVO2^77_yHfWE-o-5CfQOLL(CEr6K7OW-Xe1U3Q` zKwY3Gf&$$ED{JB`_1D z1nmJnfVKe1+GuacxjRkI`4tq|y8-+E90DQV2mO)&;x{`dBa8w5EW}7@&~awbOrI0D z*UP#sQGWZKrhb{ezD26dwK6@W1@w8bs9#Q8pUb)}RZ}<9z&emSrcm_nsr>mCsH9X{ zr)yj+-%mF9IeOR6F6gyYMf>ht*4i}YZ=Nxn4;IPD%onrqheX!J`|fARwM8P;V8MKf EP?@lb-T(jq literal 0 HcmV?d00001 diff --git a/codigo_restaurado.cpp b/codigo_restaurado.cpp new file mode 100644 index 0000000..012a6d3 --- /dev/null +++ b/codigo_restaurado.cpp @@ -0,0 +1,15 @@ +#include +#include + +// Um loop simples para testar palavras-chave +int main() { + std::vector vec; + for (int i = 0; i < 10; ++i) { + vec.push_back(i); + } + + if (!vec.empty()) { + std::cout << "O vetor nao esta vazio!" << std::endl; + } + return 0; +} \ No newline at end of file diff --git a/compressor b/compressor new file mode 100644 index 0000000000000000000000000000000000000000..7a6884166b3f33b3f14f876f2eb5e3f6ea343f1e GIT binary patch literal 214048 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

wVAaU&mvgtz_ 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 z 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 literal 0 HcmV?d00001 diff --git a/examples/small_texts/README.md b/examples/small_texts/README.md index e799938..6f8bc93 100644 --- a/examples/small_texts/README.md +++ b/examples/small_texts/README.md @@ -1 +1,6 @@ -Small texts to test compression. \ No newline at end of file +Small texts to test compression. + +Jorge +Python +If: +Else: \ No newline at end of file diff --git a/include/compressor/compressor.h b/include/compressor/compressor.h new file mode 100644 index 0000000..5187231 --- /dev/null +++ b/include/compressor/compressor.h @@ -0,0 +1,18 @@ +#pragma once +#include +#include +#include + +namespace compressor { + +// Compress: se freq_table_path vazio, conta bytes do input. +// Se freq_table_path não for vazio, tenta usar a tabela (suporta tokens multi-char). +void compress_file(const std::string &inputPath, + const std::string &outputPath, + const std::string &freq_table_path = ""); + +// Decompress: lê arquivo compactado e escreve output +void decompress_file(const std::string &inputPath, + const std::string &outputPath); + +} // namespace compressor diff --git a/src/compressor/compressor.cpp b/src/compressor/compressor.cpp new file mode 100644 index 0000000..f3f555e --- /dev/null +++ b/src/compressor/compressor.cpp @@ -0,0 +1,209 @@ +#include "../../include/compressor/compressor.h" + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "../../include/huffman/huffman_tree.h" +#include "../../include/huffman/bit_stream.h" + +using namespace std; + +namespace compressor { + +// ================================================================================= +// FUNÇÕES AUXILIARES +// ================================================================================= + +// Lê um arquivo inteiro para uma string. +static string readFileToString(const string &path) { + ifstream in(path, ios::binary); + if (!in) throw runtime_error("Nao foi possivel abrir o arquivo de entrada: " + path); + ostringstream ss; + ss << in.rdbuf(); + return ss.str(); +} + +// Conta a frequência de cada byte individualmente. +static map countByteFreqs(const string &data) { + map freqs; + for (unsigned char c : data) { + string s(1, static_cast(c)); + freqs[s]++; + } + return freqs; +} + +// Converte sequências de escape (ex: "\\n") para seus caracteres reais (ex: '\n'). +static string unescape_chars(const std::string& s) { + std::string unescaped; + for (size_t i = 0; i < s.length(); ++i) { + if (s[i] == '\\' && i + 1 < s.length()) { + i++; // Pula a barra invertida + if (s[i] == 'n') { + unescaped += '\n'; + } else if (s[i] == 'r') { + unescaped += '\r'; + } else if (s[i] == 't') { + unescaped += '\t'; + } else if (s[i] == '\\') { + unescaped += '\\'; + } + } else { + unescaped += s[i]; + } + } + return unescaped; +} + +// Lê o arquivo de tabela de frequência ("simbolo:contagem"). +static map readFreqTable(const string &path) { + map freqs; + if (path.empty()) return freqs; + ifstream in(path, ios::binary); + if (!in) throw runtime_error("Nao foi possivel abrir o arquivo de tabela de frequencia: " + path); + string line; + while (getline(in, line)) { + if (line.empty()) continue; + size_t pos = line.rfind(':'); + if (pos == string::npos) continue; + + string key = line.substr(0, pos); + string val = line.substr(pos + 1); + + try { + uint64_t v = stoull(val); + freqs[unescape_chars(key)] = v; + } catch (...) { + // Ignora linhas com formato inválido + } + } + return freqs; +} + +// Quebra o texto de entrada em tokens (símbolos) usando a abordagem "greedy". +static vector tokenize_greedy(const string &text, const vector &symbols_sorted) { + vector out; + size_t i = 0; + const size_t n = text.size(); + while (i < n) { + bool matched = false; + for (const string &sym : symbols_sorted) { + size_t L = sym.size(); + if (L == 0) continue; + if (i + L <= n && memcmp(text.data() + i, sym.data(), L) == 0) { + out.push_back(sym); + i += L; + matched = true; + break; + } + } + if (!matched) { + out.emplace_back(string(1, text[i])); + ++i; + } + } + return out; +} + + +// ================================================================================= +// FUNÇÕES PRINCIPAIS +// ================================================================================= + +// Função principal para comprimir um arquivo. +void compress_file(const string &inputPath, const string &outputPath, const string &freq_table_path) { + string data = readFileToString(inputPath); + map freqs = readFreqTable(freq_table_path); + vector tokens; + + // Se uma tabela de frequência foi fornecida, usa a tokenização inteligente. + if (!freqs.empty()) { + vector symbols; + for (const auto &p : freqs) { + symbols.push_back(p.first); + } + sort(symbols.begin(), symbols.end(), [](const string &a, const string &b) { + if (a.size() != b.size()) return a.size() > b.size(); + return a < b; + }); + + tokens = tokenize_greedy(data, symbols); + } else { + // Senão, faz a compressão simples por byte. + freqs = countByteFreqs(data); + for (unsigned char c : data) { + tokens.emplace_back(string(1, static_cast(c))); + } + } + + // Constrói a Árvore de Huffman. + HuffmanTree tree; + tree.build(freqs); + + ofstream out(outputPath, ios::binary); + if (!out) throw runtime_error("Nao foi possivel abrir o arquivo de saida: " + outputPath); + + // Salva a árvore no início do arquivo. + tree.serialize(out); + + // Escreve os dados comprimidos bit a bit. + BitOutputStream bout(out); + auto codes = tree.getCodes(); + + for (const auto &tok : tokens) { + auto it = codes.find(tok); + if (it == codes.end()) { + throw runtime_error("Nao foi encontrado codigo para o token durante a compressao. Token: '" + tok + "'"); + } + for (bool b : it->second) { + bout.writeBit(b); + } + } + bout.flush(); + out.close(); + + cout << "Compressed " << inputPath << " -> " << outputPath << endl; +} + +// Função principal para descomprimir um arquivo. +void decompress_file(const string &inputPath, const string &outputPath) { + ifstream in(inputPath, ios::binary); + if (!in) throw runtime_error("Nao foi possivel abrir o arquivo comprimido: " + inputPath); + + // Lê a árvore do início do arquivo. + HuffmanTree tree; + tree.deserialize(in); + + auto root = tree.getRoot(); + if (!root) { return; } + + ofstream out(outputPath, ios::binary); + if (!out) throw runtime_error("Nao foi possivel abrir o arquivo de saida: " + outputPath); + + // Lê os bits e percorre a árvore para decodificar. + BitInputStream bin(in); + auto node = root; + while (true) { + int b = bin.readBit(); + if (b == -1) break; + + node = (b == 0) ? node->left : node->right; + + if (node->isLeaf()) { + out << node->symbol; + node = root; + } + } + + out.close(); + in.close(); +} + +} // namespace compressor \ No newline at end of file diff --git a/src/compressor/main.cpp b/src/compressor/main.cpp index 35fcac8..deebf25 100644 --- a/src/compressor/main.cpp +++ b/src/compressor/main.cpp @@ -1,15 +1,52 @@ -#include -#include -#include -#include "../../include/huffman/bit_stream.h" -#include "../../include/huffman/huffman_tree.h" - -int main(int argc, char** argv){ - if(argc < 2){ - std::cerr << "Usage: compressor -c|-d ...\n"; - return 1; - } - // This is a stub. Implement parsing -c (compress) and -d (decompress) and call appropriate functions. - std::cout << "Compressor stub. Implement command-line parsing and logic.\n"; - return 0; -} +#include +#include "../../include/compressor/compressor.h" + +using namespace std; + +static void printUsage() { + cerr << "Usage:\n" + << " compressor -c [-f freq_table] -i -o \n" + << " compressor -d -i -o \n"; +} + +int main(int argc, char** argv) { + if(argc < 2) { printUsage(); return 1; } + + bool doCompress = false, doDecompress = false; + string freqFile, inputFile, outputFile; + + for(int i=1;i " << outputFile << endl; + } else if(doDecompress) { + if(inputFile.empty() || outputFile.empty()) { printUsage(); return 1; } + compressor::decompress_file(inputFile, outputFile); + cout << "Decompressed " << inputFile << " -> " << outputFile << endl; + } else { + printUsage(); + return 1; + } + } catch(const exception &ex) { + cerr << "Error: " << ex.what() << "\n"; + return 2; + } + + return 0; +} diff --git a/src/freq_counter/main.cpp b/src/freq_counter/main.cpp index d29bfaa..48d841c 100644 --- a/src/freq_counter/main.cpp +++ b/src/freq_counter/main.cpp @@ -8,6 +8,27 @@ #include +#include // Garanta que isso está no topo + +// Função para escapar caracteres especiais +std::string escape_chars(const std::string& s) { + std::string escaped; + for (char c : s) { + if (c == '\n') { + escaped += "\\n"; + } else if (c == '\r') { + escaped += "\\r"; + } else if (c == '\t') { + escaped += "\\t"; + } else if (c == '\\') { + escaped += "\\\\"; + } else { + escaped += c; + } + } + return escaped; +} + //Function to help in case the loop find a char in the file std::string charToString(char c) { return std::string(1, c); @@ -131,9 +152,9 @@ int main(int argc, char** argv) { } // Formato do map simbolo:fequencia - for (const auto& pair : freqs) { - (*out_stream) << pair.first << ":" << pair.second << "\n"; - } + for (const auto& pair : freqs) { + (*out_stream) << escape_chars(pair.first) << ":" << pair.second << "\n"; +} if (out_file.is_open()) { out_file.close(); diff --git a/src/lib/huffman_tree.cpp b/src/lib/huffman_tree.cpp index 560d884..8750137 100644 --- a/src/lib/huffman_tree.cpp +++ b/src/lib/huffman_tree.cpp @@ -3,7 +3,7 @@ #include #include -void serialize_helper(std::shared_ptr node, BitOutputStream& bit_out) { +void HuffmanTree::serialize_helper(std::shared_ptr node, BitOutputStream& bit_out) const { if (node == nullptr) { return; } @@ -27,7 +27,7 @@ void serialize_helper(std::shared_ptr node, BitOutputStream& bit_out) { } } -std::shared_ptr deserialize_helper(BitInputStream& bit_in) { +std::shared_ptr HuffmanTree::deserialize_helper(BitInputStream& bit_in) { int bit = bit_in.readBit(); if (bit == -1) { return nullptr; diff --git a/tabela_cpp.freq b/tabela_cpp.freq new file mode 100644 index 0000000..b32839d --- /dev/null +++ b/tabela_cpp.freq @@ -0,0 +1,53 @@ +\n:14 +\r:14 + :71 +!:2 +":2 +#:2 +(:5 +):5 ++:2 +-:1 +.:2 +/:2 +0:3 +1:1 +::6 +;:6 +<:8 +=:1 +>:3 +O:1 +U:1 +_:1 +a:12 +b:1 +c:5 +cout:1 +e:9 +endl:1 +for:1 +h:2 +i:7 +if:1 +include:2 +int:3 +iostream:1 +k:1 +l:3 +m:4 +n:2 +o:5 +p:6 +r:4 +return:1 +s:6 +std:3 +t:5 +u:1 +v:7 +vector:2 +y:1 +z:1 +{:3 +}:3 From d105e8e23bae4e74182cd02b1964902e5cce8ed8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kau=C3=A3=20do=20Valle?= <110422010+DevlTz@users.noreply.github.com> Date: Sun, 12 Oct 2025 10:16:15 -0300 Subject: [PATCH 2/5] Update src/freq_counter/main.cpp Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com> --- src/freq_counter/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/freq_counter/main.cpp b/src/freq_counter/main.cpp index 48d841c..138717f 100644 --- a/src/freq_counter/main.cpp +++ b/src/freq_counter/main.cpp @@ -8,7 +8,7 @@ #include -#include // Garanta que isso está no topo +#include // Ensure this is at the top // Função para escapar caracteres especiais std::string escape_chars(const std::string& s) { From f0b38dc1b56c59203b9dd399a78f42e0fb1f7137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kau=C3=A3=20do=20Valle?= <110422010+DevlTz@users.noreply.github.com> Date: Sun, 12 Oct 2025 10:21:08 -0300 Subject: [PATCH 3/5] Atualizar o main.cpp --- src/freq_counter/main.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/freq_counter/main.cpp b/src/freq_counter/main.cpp index 138717f..330db89 100644 --- a/src/freq_counter/main.cpp +++ b/src/freq_counter/main.cpp @@ -6,9 +6,7 @@ #include #include "../../include/huffman/huffman_tree.h" #include - - -#include // Ensure this is at the top +#include // Função para escapar caracteres especiais std::string escape_chars(const std::string& s) { From 99d629f6a631bc19a41011e3b88d61fac1228265 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kau=C3=A3=20do=20Valle?= <110422010+DevlTz@users.noreply.github.com> Date: Sun, 12 Oct 2025 11:12:19 -0300 Subject: [PATCH 4/5] Delete code_test.txt --- code_test.txt | 3 --- 1 file changed, 3 deletions(-) delete mode 100644 code_test.txt diff --git a/code_test.txt b/code_test.txt deleted file mode 100644 index d637def..0000000 --- a/code_test.txt +++ /dev/null @@ -1,3 +0,0 @@ -O algoritmo de Huffman é um método de compressão de dados sem perdas. -A ideia é usar a frequência dos símbolos para criar uma codificação de tamanho variável. -Símbolos mais frequentes recebem códigos mais curtos, e símbolos raros recebem códigos mais longos. Que funcione agora pelo amor de DEUSSSSSSSSSSSS From 4468b519b5e7ad308bd0c5eb3887a3c298b086a8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kau=C3=A3=20do=20Valle?= <110422010+DevlTz@users.noreply.github.com> Date: Sun, 12 Oct 2025 21:12:47 -0300 Subject: [PATCH 5/5] Delete examples/small_texts/README.md --- examples/small_texts/README.md | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 examples/small_texts/README.md diff --git a/examples/small_texts/README.md b/examples/small_texts/README.md deleted file mode 100644 index 6f8bc93..0000000 --- a/examples/small_texts/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Small texts to test compression. - -Jorge -Python -If: -Else: \ No newline at end of file