История изменений
Исправление
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)
, «забывающая» структуру.