From e0b869a844919c605cef76aaa1fa2744f0de1fbf Mon Sep 17 00:00:00 2001 From: Phuntsok Drak-pa Date: Sun, 29 Apr 2018 14:13:14 +0200 Subject: [PATCH] Documenting and optimization --- src/common.cc | 8 ++++---- src/compress.cc | 40 ++++++++++++++++++---------------------- src/compress.hh | 7 +++++++ src/utf8.cc | 4 ++-- 4 files changed, 31 insertions(+), 28 deletions(-) diff --git a/src/common.cc b/src/common.cc index 19477e6..222d42b 100644 --- a/src/common.cc +++ b/src/common.cc @@ -22,10 +22,10 @@ using dic_t = std::map, uint32_t>; * ajoutée dans le dictionnaire ou non, et le uint32_t indiquant la valeur * numérique de la chaîne dans le dictionnaire. * - * \param dictionary Dictionnaire - * \param nr_chaine Numéro de la chaine précédant le caractères \p c dans \p dictionary - * \param c Caractère suivant la chaine de caractères \p nr_chaine - * \return std::pair + * \param t_dictionary Dictionnaire + * \param t_nr_chaine Numéro de la chaine précédant le caractères \p t_c dans \p t_dictionary + * \param t_c Caractère suivant la chaine de caractères \p t_nr_chaine + * \return const std::pair */ const std::pair dico(std::map, uint32_t> &t_dictionary, diff --git a/src/compress.cc b/src/compress.cc index f928b49..0c40e0b 100644 --- a/src/compress.cc +++ b/src/compress.cc @@ -9,19 +9,21 @@ #include #include #include -#include - -#ifdef Debug -constexpr bool debug_mode = true; -#else -constexpr bool debug_mode = false; -#endif using dict_t = std::map, uint32_t>; using ustring = std::basic_string; // chaîne non encodée using uvec = std::vector; // chaîne encodée using std::printf; +/** + * + * Reçoit une liste de paires std::thread/vecteurs, le premier étant le + * processus dont sa sortie est stockée dans le second. La sortie, une liste + * de caractères uint32_t, est écrite dans le fichier de sortie \p out. + * + * \param[in] t_threads + * \param[out] t_out + */ void join_and_write( std::vector, uvec>> &t_threads, FILE *t_out) { @@ -43,8 +45,8 @@ void join_and_write( * de caractères UTF-8 représentant des mots de chars compressés. La fonction * renvoie ledit vecteur de uint32_t via le paramètre \p t_res. * - * \param[in] t_text Chaîne de caractères uint8_t représentant le fichier - * d'entrée \param[out] t_res Chaîne de caractères de sortie + * \param[in] t_text Chaîne de caractères uint8_t représentant le fichier d'entrée + * \param[out] t_res Chaîne de caractères de sortie */ void lzw_compress(const std::vector &t_text, uvec &t_res) { dict_t dictionary{}; @@ -69,15 +71,13 @@ void lzw_compress(const std::vector &t_text, uvec &t_res) { } /** - * \brief function description - * * Wrapper de la fonction \ref lzw_compress gérant l'ouverture, la lecture, * l'écriture et la fermeture des fichiers d’entrée et de sortie. Si \p * t_out_file est nul (chemin non spécifié), il prendra alors la valeur de * \p t_in_file à laquelle sera annexé l’extension `.lzw`. * - * \param t_in_file Chemin vers le fichier d’entrée - * \param t_out_file Chemin vers le fichier de sortie + * \param[in] t_in_file Chemin vers le fichier d’entrée + * \param[in] t_out_file Chemin vers le fichier de sortie */ void compress(const std::string &t_in_file, const char *t_out_file) { // Fichier d’entrée @@ -90,12 +90,11 @@ void compress(const std::string &t_in_file, const char *t_out_file) { } // Fichier de sortie - const char *filename = (t_out_file) ? t_out_file : "output.lzw"; - FILE *out = fopen(filename, "wb"); + FILE *out = + (t_out_file) ? fopen(t_out_file, "wb") : fopen("output.lzw", "wb"); if (!out) { std::cerr << "Error at " << __FILE__ << ":" << __LINE__ - 4 - << ": could not open output file \"" << filename - << "\". Aborting...\n"; + << ": could not open output file. Aborting...\n"; input_file.close(); exit(1); } @@ -108,8 +107,8 @@ void compress(const std::string &t_in_file, const char *t_out_file) { while (input_file.read(chunk.data(), static_cast(chunk.size()))) { threads.emplace_back(nullptr, uvec{}); - threads.back().first = std::unique_ptr( - new std::thread{lzw_compress, chunk, ref(threads.back().second)}); + threads.back().first = std::make_unique( + std::thread{lzw_compress, chunk, ref(threads.back().second)}); assert(threads.back().first); if (threads.size() >= 8) { join_and_write(threads, out); @@ -135,9 +134,6 @@ void compress(const std::string &t_in_file, const char *t_out_file) { uvec ret{}; lzw_compress(chunk, ret); for (const auto c : ret) { - if constexpr (debug_mode) { - printf("%c\t", c); - } write_utf8(out, c); } } diff --git a/src/compress.hh b/src/compress.hh index 8c3ddcb..056fa6f 100644 --- a/src/compress.hh +++ b/src/compress.hh @@ -9,6 +9,13 @@ #include "common.hh" #include #include +#include + +/// \brief Exécution des threads et écriture de leur résultat dans le fichier de sortie +void join_and_write( + std::vector, std::vector>> + &, + FILE *); /// \brief Compression d'une chaine de caractères void lzw_compress(const std::vector &, std::vector &); diff --git a/src/utf8.cc b/src/utf8.cc index 129f36e..0086007 100644 --- a/src/utf8.cc +++ b/src/utf8.cc @@ -15,8 +15,8 @@ using ustring = std::basic_string; // chaine non encodée * Les caractères \c passés en argument sont écrit dans le fichier de sortie au * format UTF-8 * - * \param out Fichier de sortie - * \param c Caractères à écrire dans \p out + * \param[in] out Fichier de sortie + * \param[in] c Caractères à écrire dans \p out */ void write_utf8(FILE* t_out, uint32_t t_c) { if(t_c < 128) {