with Ada.Containers.Vectors; with Iterators.Collectors.Sequences; with Iterators.From.Keyed; with Iterators.Generators.Containers; with Iterators.Linkers.Sequences; with Iterators.Root.Operators; with Iterators.Traits.Containers.Appendable; with Iterators.Traits.Containers.Keyed; generic with package Ada_Containers is new Ada.Containers.Vectors (<>); package Iterators.From.Vectors with Preelaborate is subtype Container is Ada_Containers.Vector; subtype Elements is Ada_Containers.Element_Type; package Container_Traits is new Traits.Containers (Container => Container, Element_Type => Ada_Containers.Element_Type, Cursor => Ada_Containers.Cursor, First => Ada_Containers.First, Next => Ada_Containers.Next, Has_Element => Ada_Containers.Has_Element, Reference_Type => Ada_Containers.Reference_Type, Reference => Ada_Containers.Reference, Constant_Reference_Type => Ada_Containers.Constant_Reference_Type, Constant_Reference => Ada_Containers.Constant_Reference); package Appendable_Traits is new Container_Traits.Appendable (Ada_Containers.Append); procedure Cant_Insert_Or_Include (C : in out Container; I : Ada_Containers.Index_Type; E : Ada_Containers.Element_Type); -- Vectors do not support reassembly using indexes because there is no safe -- way to distinguish an insertion of an inclusion. To avoid data loss, for -- that kind of use case a Map is recommended. This operation always raises. package Keyed_Traits is new Container_Traits.Keyed (Keys => Ada_Containers.Index_Type, Key => Ada_Containers.To_Index, Insert => Cant_Insert_Or_Include, Include => Cant_Insert_Or_Include); package Iterators is new Standard.Iterators.Root (Elements); -- This package provides the regular sources, operators, and sinks. subtype Iterator is Iterators.Iterator; subtype Cursor is Iterators.Cursor; package Collectors is new Standard.Iterators.Collectors.Sequences (Iterators, Container_Traits, Appendable_Traits); -- Provides collection back into the same container type. package Col renames Collectors; package Generators is new Standard.Iterators.Generators.Containers (Iterators, Container_Traits); -- Provides conversion from container into iterator. package Gen renames Generators; package Keyed is new From.Keyed (Unkeyed_Generators => Generators, Containers => Container_Traits, Keyed_Containers => Keyed_Traits); -- Provides the Keyed alternatives: generators, operators, collectors. package Operators is new Iterators.Operators; package Op renames Operators; -- shortcut -- Provides type-preserving operators. package Linkers is new Standard.Iterators.Linkers.Sequences (Iterators, Operators, Collectors); end Iterators.From.Vectors;