LINUX.ORG.RU

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

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

если тебе нужна эмуляция плэйн доступа, то тебе сначала нужно построить простой массив индексов, а вот уже по нему итерироваться.

Ну собственно так и делается, но неявным (ленивым) образом.

Насчет иерархии Index<-Cell<-Iterator.

Index (в моем тутошнем представлении, термин мб не вполне удачный) - это максимально компактная фиговина которая обеспечивает доступ к элементу. При этом Index не самодостаточен - в нем нет указателя на контейнер/элемент, это следствие компактности. Но подумав - да, ты прав - индексов может быть несколько разных, различающихся соотношением компактность/скорость доступа/удобство работы.

Cell - это прямой доступ к ячейке и ее соседям + выдача всякой информации о ячейке - расположение в пространстве, является ли граничной и тд. Но Cell не имеет интерфейса для перехода на следующую ячейку, это важно. Это попытка разделить действия над элементом и обход контейнера.

Iterator - это Cell которым можно обойти весь массив.

Собственно у меня такая идеология уже была для сложных контейнеров вроде AMR, но тут появилось три новых момента:

  1. Индексов может быть несколько разных, зависит от контейнера и от задачи. Видимо им надо будет давать описательные имена.

  2. Итератор может эффективно отслеживать обычный целочисленный индекс и такой индекс должен быть всегда, это дает параллельный обход.

  3. Эту конструкцию надо единообразно прикрутить ко всем моим контейнерам.

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

если тебе нужна эмуляция плэйн доступа, то тебе сначала нужно построить простой массив индексов, а вот уже по нему итерироваться.

Ну собственно так и делается, но неявным (ленивым) образом.

Насчет иерархии Index<-Cell<-Iterator.

Index (в моем тутошнем представлении, термин мб не вполне удачный) - это максимально компактная фиговина которая обеспечивает доступ к элементу. При этом Index не самодостаточен - в нем нет указателя на контейнер/элемент, это следствие компактности. Но подумав - да, ты прав - индексов может быть несколько разных, различающихся соотношением компактность/скорость доступа/удобство работы.

Cell - это прямой доступ к ячейке и ее соседям + выдача всякой информации о ячейке - расположение в пространстве, является ли граничной и тд. Но Cell не имеет интерфейса для перехода на следующую ячейку, это важно. Это попытка отделить действяи над элементом и обход.

Iterator - это Cell которым можно обойти весь массив.

Собственно у меня такая идеология уже была для сложных контейнеров вроде AMR, но тут появилось три новых момента:

  1. Индексов может быть несколько разных, зависит от контейнера и от задачи. Видимо им надо будет давать описательные имена.

  2. Итератор может эффективно отслеживать обычный целочисленный индекс и такой индекс должен быть всегда, это дает параллельный обход.

  3. Эту конструкцию надо единообразно прикрутить ко всем моим контейнерам.