with Ada.Containers.Indefinite_Doubly_Linked_Lists;
with Iterators.Collectors.Sequences;
with Iterators.Generators.Containers;
with Iterators.Traits.Containers.Appendable;
generic
package Iterators.From.Elements.Lists with Preelaborate is
package Ada_Containers is new
Ada.Containers.Indefinite_Doubly_Linked_Lists (Any_Element);
subtype Container is Ada_Containers.List;
-- Bug work-arounding:
type Reference_Type
(Element : not null access Any_Element) is
new Ada_Containers.Reference_Type (Element => Element);
function Reference
(C : aliased in out Container;
P : Ada_Containers.Cursor) return Reference_Type is
(Reference_Type
(Ada_Containers.Reference_Type'
(Ada_Containers.Reference (C, P))));
type Constant_Reference_Type
(Element : not null access constant Any_Element) Is
new Ada_Containers.Constant_Reference_Type (Element => Element);
function Constant_Reference
(C : aliased Container;
P : Ada_Containers.Cursor) return Constant_Reference_Type is
(Constant_Reference_Type
(Ada_Containers.Constant_Reference_Type'
(Ada_Containers.Constant_Reference (C, P))));
-- Resume normal operation
package Container_Traits is new Traits.Containers
(Container => Container,
Element_Type => Any_Element,
Cursor => Ada_Containers.Cursor,
First => Ada_Containers.First,
Next => Ada_Containers.Next,
Has_Element => Ada_Containers.Has_Element,
Reference_Type => Reference_Type,
Reference => Reference,
Constant_Reference_Type => Constant_Reference_Type,
Constant_Reference => Constant_Reference);
package Appendable_Traits is new Container_Traits.Appendable
(Ada_Containers.Append);
package Collectors is new Standard.Iterators.Collectors.Sequences
(Iterators,
Container_Traits,
Appendable_Traits);
package Col renames Collectors;
package Generators is new Standard.Iterators.Generators.Containers
(Iterators,
Container_Traits);
package Gen renames Generators;
package Linking renames Collectors.Linking;
end Iterators.From.Elements.Lists;