Opened 4 years ago

Closed 4 years ago

Last modified 4 years ago

#935 closed ожидается проверка (задача сдана)

HW #3

Reported by: fedorov.vladimir Owned by: Дмитрий Свиридкин
Component: HW #3 (Huffman) Version: 3.0
Keywords: Cc:

Description


Attachments (2)

00_to_ff.core (256 bytes) - added by Дмитрий Свиридкин 4 years ago.
compress.err (6.4 KB) - added by Дмитрий Свиридкин 4 years ago.

Download all attachments as: .zip

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: ожидается проверкаожидаются исправления

Failed to compress input file input/00_to_ff.core: exit code 139

comment:2 Changed 4 years ago by fedorov.vladimir

Owner: changed from fedorov.vladimir to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 1.02.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 fedorov.vladimir

Owner: changed from fedorov.vladimir to Дмитрий Свиридкин
Type: ожидаются исправленияожидается проверка
Version: 2.03.0

comment:5 Changed 4 years ago by Дмитрий Свиридкин

Resolution: задача сдана
Status: assignedclosed

Вложеность кода в 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

Last edited 4 years ago by Дмитрий Свиридкин (previous) (diff)
Note: See TracTickets for help on using tickets.