Opened 4 years ago
Last modified 4 years ago
#953 assigned ожидается проверка
#HW_03
Reported by: | samoylov.viktor | Owned by: | Egor Suvorov |
---|---|---|---|
Component: | HW #3 (Huffman) | Version: | 3.0 |
Keywords: | Cc: |
Description
Change History (5)
comment:1 Changed 4 years ago by
Version: | 1.0 → 2.0 |
---|
comment:2 Changed 4 years ago by
Owner: | changed from Egor Suvorov to samoylov.viktor |
---|---|
Type: | ожидается проверка → ожидаются исправления |
comment:4 Changed 4 years ago by
Owner: | changed from samoylov.viktor to Egor Suvorov |
---|---|
Version: | 2.0 → 3.0 |
Вроде всё исправил, кроме static_assert(CHAR_BIT == 8)(не понял, где он должен быть) и явного вызова конструктора у unique_ptr(без него никак). Также unique_number всё-таки используется, чтобы у внутренних вершин не было одинаковых символов(см.переписку в телеграмме).
comment:5 Changed 4 years ago by
Type: | ожидаются исправления → ожидается проверка |
---|
Note: See
TracTickets for help on using
tickets.
Проверялась ревизия 4014 или раньше.
Третья попытка разблокирована.
Корректность 4/9
HuffmanTree
не является антирефлексивным.uint32_t
, он разный на разных машинах.Тесты 7/8
Test1
/Test2
ничего не говорят о том, чем эти тесты принципиально отличаются и что делать, если один из них упал.BitRead
лучше не дублировать его код, а честно проверять, какие биты считались.Архитектура 3.5/5
test
,src
,include
— несимметрично.assert
'ы на символы. Лучшеvector<bool>
или что-нибудь похожее. Куда нельзя запихать ничего, кроме битовой последовательности.BitBuffer
BitBufferWrite
и Хаффманом. И тесты становятся сильно сложнее.namespace BitBuffer
, то пусть классы будутWriter
/Reader
. Иначе дублирование получается.CLI
STREAMMODE
— явно какая-то деталь реализации, зря торчит вCLI.h
CLI
ровно один сценарий использования: сначала коснтруктор, потом ровно один разrun()
(если больше раз, то неясно, что будет). Хорошо бы включитьrun()
в конструктор. А потом, кажется, обнаружится, чтоParams
иCLI
можно не разделять. Ну или выкинуть классCLI
и сделать его одной функцией, оставить толькоCLI
.isFlag
— тоже явная деталь реализации, незачем светиться вCLI.h
CLIException
можно упростить при помощиusing
конструктора.int32_t
, аint
всё-таки по умолчанию.CLI
подогнан подmain
, а не под нормальный C++-интерфейс. Костыли в тестах на это намекают.Huffman
uint32_t
для размера файлов и частот символов — очень мало.unique_ptr
, тогда семантика владения будет ясна.HuffmanNode
: странно, что один конструктор и для листьев, и для внутренних вершин. Они вообще по-разному себя ведут.HuffmanArchiver
FrequencyTable
и две связанных с ним функции намекают, что, возможно, это всё-таки отдельный класс.readFrequencyTable
несимметричен кwriteFrequencyTable
: ему требуется какая-то дополнительная информация. Пусть будут полностью взаимно обратны.getFrequencies
тоже переедет в этот класс в каком-то виде.Стиль 5/8
Makefile
: все-таки надо вынести компилятор и флаги компиляции/линковки в отдельные переменныеnamespace BitBuffer{
— пробел перед{
BitBuffer
move
. Тогда в случае, когда исходно было rvalue, не будет копий.0b1'000'00'00
.static_assert(CHAR_BIT == 8)
, всё равно используетеuint8_t
везде.uint8_t
лучше не черезwrite
, а черезput
.CLI
StreamMode
, CamelCase.createArgs
можно заинлайнить в конструктор.return
не нужны.if
сcontinue
, а цепочкаelse if
иthrow
в конце в последнемelse
.string{args[++i]}
Param
делать полем, раз вы его всегда муваете вrun()
. Звучит как локальная переменная дляrun()
. А тогда уж иgetStreamParam
может быть не методом, а просто храним ссылку/указатель на поле в мэпе.main
const_cast
нужен для снятия констатности. Навешивать её лучше при помощиstatic_cast
.sizes
)std::exception
. Можно сократить.endl
).Huffman
getLeave
-->getLeaf
, аналогично сisLeave
. Это единственное число слова leaf.getLeave
лучше инвертироватьif
и сделать его симметричным:if (getBit() == 0) foo else bar
. Биты-то симметричны.if (a.x != b.x) return a.x < b.x; if (a.y != b.y) return a.y < b.y; return false
. Сейчас запутались, получили UB и минус кучу баллов.unique_number
не используется.root = std::unique_ptr
явный вызов конструктора не нужен.HuffmanArchiver
statistics
с большой буквы.symbol
)reinterpret_cast
один байт, лучшеget
.getFrequencies
читает из файлаsizes.sizeOfExtraData
. Я бы ожидал, чтоstatistics
— вообще пассивное поле, в которое только добавляют информацию.amount
, аnumber
(первое для неисчисляемых, второе для исчисляемых).compress
/extract
— очень длинный какой-то.this->
codes
Otherwise
, аNon-empty table
.CompressStats
).