#957 closed ожидается проверка (задача НЕ сдана)
HW #3
Reported by: | sukhodolskiy.maksim | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (6)
comment:1 Changed 4 years ago by
Owner: | changed from Sokolov Viacheslav to Egor Suvorov |
---|
comment:2 Changed 4 years ago by
Version: | 1.0 → 2.0 |
---|
comment:3 Changed 4 years ago by
Version: | 2.0 → 3.0 |
---|
comment:4 Changed 4 years ago by
Resolution: | → задача НЕ сдана |
---|---|
Status: | assigned → closed |
Note: See
TracTickets for help on using
tickets.
Первая и последняя посылка — по акции, с весом 0.5. Проверялась ревизия 4118. После неё ещё были 4119 (23:00, после дедлайна) и 4177 (30 апреля, после дедлайна).
Корректность 0.5/9
hash<basic_string<unsigned char>>
— это что-то нестандартное.#include <cassert>
,#include <climits>
кое-где (в последних ревизиях почти всё поправлено)const char*
, это запрещено.hw_03
.HuffmanTree
вызывается от маленького вектора.Архитектура 2/5
'0'
и'1'
, это путает и убивает типобезопасность. А ещё зачем-то используются в этом же местеustring
, что совсем не по делу, хватило быstring
.HuffmanNode
unique_ptr
вместо чистых указателей решит сразу кучу проблем. С утечками и правилом пяти/нуля, скажем.mergreWithOther
лучше конструктор сделать. Или сделать это свободной функцией. А то несимметрично.NodeCompare
— точно какая-то деталь реализации, должна жить в.cpp
CLI
CLI.cpp
вnamespace {}
checkAndThrowWrongArgument
— это функция в конкретном.cpp
. Но лучше её выкинуть и честно рассказывать пользователю, что пошло не так.string_view
,span
,vector
...HuffmanException
лучше наследовать отruntime_error
/logic_error
, заодно реализация станет сильно лучше.Statistics
= default()
бесполезен: всё равно не будут проинициализированы поля.HuffmanArchiver
istream
/ostream
в параметры конструктора класса, иначе класс совсем бесполезный получается.compressCode
должна возвращать значение, а не изменять аргумент. Это точнее соответствует семантике и точно не замедлит, вы и так копируете.getFileSize
, когда можно и так посчитать статистику, честным образом. Например, написав свою обёртку вокругistream
/ostream
, которая ещё и статистику считает.Тесты 0.5/8
Стиль 1/8 (резко снижено из-за чистых указателей и переменных вне циклов)
unsigned char tmp
.Huffman
new
— FATALITY.newNode
не нужнаgetCodesTable()
- случай с пустым деревом лучше целиком разобрать отдельно. Иначе неясно, почему при пустом дереве мы всё равно запускаемtraverseTree
.HuffmanArchiver
static_assert
можно писать просто вне функций.extract
/compress
какие-то сложные, я не смог их быстро прочитать и понять логику.COMPILE_FLAGS
-->CXXFLAGS
.PHONY = all clean
, а.PHONY: all clean
CLI
bool modeSet_
-->optional<ArchiverMode> mode_
argc
, чтобы обработать все аргументы.string_view
сразу можно сделать==
. Кстати, константы тут явно мешаются, они ровно один раз встречаются.ustring character
— очень противоречивое название. Вероятно,ustring code
?