[15:47:48] <reznikmm> нужно 1) сначала придумать тип Cursor и функцию Has_Element к ней настроить на это пакет Ada.Iterator_Interfaces
[15:51:19] <reznikmm> 2) потом определить метод Iterate для своего контейнера который возвратит Forward_Iterator'Class из настроенного пакета
[15:55:12] <reznikmm> 3) затем надо решить какой тип получается при итерации по контейнеру (путь это будет T) и для него определить "обобщенную ссылку" (они бывают read-only и read-write)
[15:56:02] <reznikmm> type Constant_Reference_Type (Element : not null access constant T) is private
with Implicit_Dereference => Element;
[15:58:10] <reznikmm> 4) дальше надо научить контейнер преобразовывать курсор Cursor к этому типу, определив функцию, например Constant_Indexing
[15:59:15] <landgraf> а этот Ada.Iterator_Interfaces давно появился?
[15:59:20] <landgraf> fsf gcc ругается
[15:59:47] <reznikmm> 5) к типу контейнера указать эти все определения используя аспекты
    with
      Constant_Indexing => Constant_Indexing,
      Default_Iterator  => Iterate,
      Iterator_Element  => T;

[16:00:02] <reznikmm> давно. в ada 2012
[16:00:20] <landgraf> я вчера уже залезал в containers и нашел там интерфейс этот
[16:00:49] <reznikmm> примеры можно подглядеть в ada.containers, матрешке или гела
[16:01:34] <landgraf> я там и смотрел, а
[16:03:47] <reznikmm> вот тут более менее крадко http://forge.ada-ru.org/gela/browser/trunk/design/api/gela-compilation_unit_sets.ads
[16:05:06] <reznikmm> я вместо курсора использовал указатель на элемент. это едиственный вариант, который я смог придумать, чтобы описать контейнер как interface