История изменений
Исправление AntonI, (текущая версия) :
если тебе нужна эмуляция плэйн доступа, то тебе сначала нужно построить простой массив индексов, а вот уже по нему итерироваться.
Ну собственно так и делается, но неявным (ленивым) образом.
Насчет иерархии Index<-Cell<-Iterator.
Index (в моем тутошнем представлении, термин мб не вполне удачный) - это максимально компактная фиговина которая обеспечивает доступ к элементу. При этом Index не самодостаточен - в нем нет указателя на контейнер/элемент, это следствие компактности. Но подумав - да, ты прав - индексов может быть несколько разных, различающихся соотношением компактность/скорость доступа/удобство работы.
Cell - это прямой доступ к ячейке и ее соседям + выдача всякой информации о ячейке - расположение в пространстве, является ли граничной и тд. Но Cell не имеет интерфейса для перехода на следующую ячейку, это важно. Это попытка разделить действия над элементом и обход контейнера.
Iterator - это Cell которым можно обойти весь массив.
Собственно у меня такая идеология уже была для сложных контейнеров вроде AMR, но тут появилось три новых момента:
-
Индексов может быть несколько разных, зависит от контейнера и от задачи. Видимо им надо будет давать описательные имена.
-
Итератор может эффективно отслеживать обычный целочисленный индекс и такой индекс должен быть всегда, это дает параллельный обход.
-
Эту конструкцию надо единообразно прикрутить ко всем моим контейнерам.
Исходная версия AntonI, :
если тебе нужна эмуляция плэйн доступа, то тебе сначала нужно построить простой массив индексов, а вот уже по нему итерироваться.
Ну собственно так и делается, но неявным (ленивым) образом.
Насчет иерархии Index<-Cell<-Iterator.
Index (в моем тутошнем представлении, термин мб не вполне удачный) - это максимально компактная фиговина которая обеспечивает доступ к элементу. При этом Index не самодостаточен - в нем нет указателя на контейнер/элемент, это следствие компактности. Но подумав - да, ты прав - индексов может быть несколько разных, различающихся соотношением компактность/скорость доступа/удобство работы.
Cell - это прямой доступ к ячейке и ее соседям + выдача всякой информации о ячейке - расположение в пространстве, является ли граничной и тд. Но Cell не имеет интерфейса для перехода на следующую ячейку, это важно. Это попытка отделить действяи над элементом и обход.
Iterator - это Cell которым можно обойти весь массив.
Собственно у меня такая идеология уже была для сложных контейнеров вроде AMR, но тут появилось три новых момента:
-
Индексов может быть несколько разных, зависит от контейнера и от задачи. Видимо им надо будет давать описательные имена.
-
Итератор может эффективно отслеживать обычный целочисленный индекс и такой индекс должен быть всегда, это дает параллельный обход.
-
Эту конструкцию надо единообразно прикрутить ко всем моим контейнерам.