generic type Data_Type is limited private; type Data_Type_Access is access all Data_Type; pragma No_Strict_Aliasing (Data_Type_Access); type Index_Type is range <>; First_Element : Index_Type; type Data_Array is array (Index_Type range <>) of aliased Data_Type; with procedure Initialize (Self : in out Data_Type) is <>; with procedure Finalize (Self : in out Data_Type) is <>; with procedure Copy (Dst : in out Data_Type; Src : in Data_Type) is <>; with package Data_Sequences is
type Data_Type_Access is access all Data_Type;
type Data_Array is array (Index_Type range <>) of aliased Data_Type;
First_Element : Index_Type;