LINUX.ORG.RU

История изменений

Исправление Crocodoom, (текущая версия) :

Еще вопрос. Вот есть итератор/контекст I. Он кроме всего прочего содержит указатель на контейнер, указатель на ячейку и еще всяко разно - он быстрый, но толстый. И есть счетчик, он медленный (итератор на его основе с нуля долго порождать) но маленький (8 байт). Мне нужна промежуточная сущность, эдакий продвинутый счетчик - она не содержит пойнтеров, но на ее основе можно быстро получить доступ к элементу произвольного контейнера если у него правильный размер/структура. И при этом она не сильно больше счетчика. Ну и работать с ней (на уровне интерфейса) хочется как со счетчиком.

Ваш промежуточный счётчик это функтор generic_I, возвращающий «нормальный» итератор, если его вызывать на контейнере I = generic_I(array). Интерфейс функтору вы можете приделать какой хотите. И да, ещё понадобится обратная функция generic_I = make_generic(I), «забывающая» конкретный массив.

Исходная версия Crocodoom, :

Еще вопрос. Вот есть итератор/контекст I. Он кроме всего прочего содержит указатель на контейнер, указатель на ячейку и еще всяко разно - он быстрый, но толстый. И есть счетчик, он медленный (итератор на его основе с нуля долго порождать) но маленький (8 байт). Мне нужна промежуточная сущность, эдакий продвинутый счетчик - она не содержит пойнтеров, но на ее основе можно быстро получить доступ к элементу произвольного контейнера если у него правильный размер/структура. И при этом она не сильно больше счетчика. Ну и работать с ней (на уровне интерфейса) хочется как со счетчиком.

Ваш промежуточный счётчик это функтор generic_I, возвращающий «нормальный» итератор, если его вызывать на контейнере I = generic_I(array). Интерфейс функтору вы можете приделать какой хотите. И да, ещё понадобится обратная функция generic_I = make_generic(I), «забывающая» структуру.