Opened 4 years ago

Closed 4 years ago

#952 closed ожидаются исправления (задача сдана)

HW #3

Reported by: Tarabonda German Owned by: Tarabonda German
Component: HW #3 (Huffman) Version: 2.0
Keywords: Cc:

Description


Change History (2)

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

Owner: changed from Дмитрий Свиридкин to Tarabonda German
Type: ожидается проверкаожидаются исправления
==120819== Conditional jump or move depends on uninitialised value(s)
==120819==    at 0x1343E2: _DOCTEST_ANON_FUNC_8() (HuffmanTest.cpp:93)
==120819==    by 0x11EC00: doctest::Context::run() (doctest.h:5878)
==120819==    by 0x11F61D: main (doctest.h:5962)
==120819== 
==120819== Conditional jump or move depends on uninitialised value(s)
==120819==    at 0x135415: _DOCTEST_ANON_FUNC_10() (HuffmanTest.cpp:119)
==120819==    by 0x11EC00: doctest::Context::run() (doctest.h:5878)
==120819==    by 0x11F61D: main (doctest.h:5962)
==120819== 
==120819== Conditional jump or move depends on uninitialised value(s)
==120819==    at 0x13604E: _DOCTEST_ANON_FUNC_10() (HuffmanTest.cpp:135)
==120819==    by 0x11EC00: doctest::Context::run() (doctest.h:5878)
==120819==    by 0x11F61D: main (doctest.h:5962)
==120819== 

файл из 16 букв 'a': результат архивирования-разархивирования не совпадает с исходным файлом.

Файл из 256 различных байт: результат архивирования-разархивирования не совпадает с исходным файлом.


		CLI spliter(argc, argv);
		spliter.splitArgs();

Почему бы это не сделать в конструкторе?

Все файлы надо открывать в бинарном режиме.

std::shared_ptr<HuffmanNode> node(new HuffmanNode(it->first, it->second)); std::make_shared

Сделать все поля публичными в дереве -- это вы здорово придумали. Но нет. Давайте по-нормальному. Зачем метод makeTree? используйте конструктор. priority_queueu точно полем дерева быть не должна.

У вас везде умные указатели. Зачем в дереве самописный деструктор?

	uint32_t makeHeader(std::ofstream& ofstr, HuffmanTree& tree_);
	uint32_t readHeader(std::ifstream& ifstr);

Что за Header? куда его читают, куда его создают? Почему дерево по неконстантной ссылке?

constexpr uint8_t BYTE_SIZE = 8;
constexpr uint8_t INT_SIZE = 4;

Я б sizeof больше доверял. И CHAR_BIT из cstdlib

		if (i == 4)
			num += static_cast<uint32_t>(buffer) * 16777216;
		if (i == 3)
			num += static_cast<uint32_t>(buffer) * 65536;
		if (i == 2)
			num += static_cast<uint32_t>(buffer) * 256;
		if (i == 1)
			num += static_cast<uint32_t>(buffer);

Сдвиги. Знание значений степеней двойки, конечено, полезно, но не тут. if тоже не нужен


Отделите логику накопления статистики от построения дерева. И кодирование от записи битиков. Для чтения и записи битиков сделайте отдельные обертки.

Накапливать по одному битику и каждый раз искать в таблице символов -- карайне неэффективно. Используйте дерево: переходите от узла к узлу; уперлись в лист -- отдайте байт.


end-to-end тесты? Тесты CLI с неверными аргументами?


3 + 5 + 3 + 6.5

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

Resolution: задача сдана
Status: assignedclosed
Note: See TracTickets for help on using tickets.