#935 closed ожидается проверка (задача сдана)
HW #3
Reported by: | fedorov.vladimir | Owned by: | Дмитрий Свиридкин |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 3.0 |
Keywords: | Cc: |
Description
Attachments (2)
Change History (7)
Changed 4 years ago by
Attachment: | 00_to_ff.core added |
---|
Changed 4 years ago by
Attachment: | compress.err added |
---|
comment:1 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to fedorov.vladimir |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:2 Changed 4 years ago by
Owner: | changed from fedorov.vladimir to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 1.0 → 2.0 |
comment:3 Changed 4 years ago by
Owner: | changed from Дмитрий Свиридкин to fedorov.vladimir |
---|---|
Type: | ожидается проверка → ожидаются исправления |
if (cmds.getAction() == "-c") {
Может, лучше enum?
CommandException::CommandException(const char *msg) : std::exception(), error_msg(msg) {}
Конструктор по умолчанию базового класса можно не вызывать
std::unordered_map<char, std::string> codes; std::unordered_map<std::string, char> decode; HuffmanTree tree(freq, codes, decode);
выходные аргументы конструктора -- это, конечно, сильно. Не надо так.
Постройте дерево по первому аргументу. А таблицы кодов заберите из него явно, методами.
void HuffmanArchiver::bitesWrite() {
Этот метод не просто пишет биты. Он выполняет кодировние.
Аналогично метод biteRead.
Логику записи/чтения по биту стоит отделить от логики преобразования кодов.
Чтение по биту, формирование строки с кодом и каждый раз запрос к таблице кодов -- очень неэффективно. Используйте дерево:
Читайте по биту, продвигайтесь по дереву. Дошли до листи -- отдали байт.
Зачем для построения дерева multiset? просто set должно быть достаточно
char *byte_number = (char*)number_pointer;
reinterpret_cast
парсер аргументов тоже надо протестировать.
8 + 7 + 3.5 + 7
comment:4 Changed 4 years ago by
Owner: | changed from fedorov.vladimir to Дмитрий Свиридкин |
---|---|
Type: | ожидаются исправления → ожидается проверка |
Version: | 2.0 → 3.0 |
comment:5 Changed 4 years ago by
Resolution: | → задача сдана |
---|---|
Status: | assigned → closed |
Вложеность кода в main можно уменьшить с помощью function-try-block
template<typename T> using CurNode = T*;
Этот замечательный шаблон стоило сделать не в глобальном неймспейсе, а внутри класса.
И название типа неудачное. Все-таки это указатель. А переменная cur_node (cur_pos). owned_ptr<T>
, если сильно хочется.
*
char getCharAndDrop(); void move(char direction);
Почему бы не объединить эти два метода в один:
std::option<byte> move(direction)
Логику перемещения и хранения текущей позиции лучше отделить в какой-нибудь класс TreeWalker?.
9 + 8 + 4.5 + 8
Failed to compress input file input/00_to_ff.core: exit code 139