Closed kuvshinovdr closed 11 months ago
Класс Dense_bit_iterator требуется для реализации других задач, желательно поскорее его получить.
Добавить поле stride (шаг между битами). По умолчанию 1. Это позволит ходить по столбцам и диагоналям бит-матрицы.
Загрузил файл, это то, что я был должен сделать или нужно что-то добавить?
#include "matrix.hpp"
на
#include <ogxx/iterator.hpp>
bool next(bool & value) noexcept override
Возвращать истину, если итератор ещё не дошёл до конца, ложь -- если дошёл. Если не дошёл до конца -- извлекать бит и записывать его значение в value.
Правильно ли я обращаюсь ко значению value? вроде раз word = массив, то по позиции currentbit я же получаю значение бита?
Нет.
word[currentbit]
обращается к значению типа unsigned в массиве, на который указывает word. Нам же нужно извлечь один бит. Если unsigned имеет ширину word_bits (обычно это 32), то извлечь бит можно так:
(word[currentbit / word_bits] >> (currentbit % word_bits)) & 1
Определить константу word_bits можно так:
constexpr unsigned word_bits = sizeof(unsigned) * CHAR_BIT;
Изначально было правильно: >>. На паре я поменял на неправильный вариант!
Задание выполнено, код добавлен в main.
Создать файл source/dense_bit_iterator.cpp (в заголовке ошибся: сначала dense, потом bit). В нём разместить класс ogxx::Dense_bit_iterator: public ogxx::Basic_iterator<bool>. Данный итератор должен перечислять биты последовательности бит, заданной массивом значений unsigned. Позиция бита задаётся unsigned const* word и int bit, т.е. указателем на "слово" и номером бита в "слове". Всего хранится две позиции бит: текущая и конечная.
Реализовать метод next.
Перед началом работы не забудьте обновить свою ветку по ветке main.