private with Ada.Containers.Indefinite_Vectors;
package Values.Lists is
type List_Value is new Value with private;
type List_Ptr is new Value_Ptr with private;
function Create_List return List_Ptr;
overriding
function Clone( this : access List_Value ) return Value_Ptr'Class;
overriding
function Compare( this : List_Value; other : Value'Class ) return Integer;
function Get( this : List_Value; index : Positive ) return Value_Ptr;
overriding
function Get_Type( this : List_Value ) return Value_Type;
overriding
function Image( this : List_Value ) return String;
procedure Append( this : in out List_Value; val : Value_Ptr'Class );
function Length( this : List_Value ) return Natural;
procedure Set( this : in out List_Value; index : Positive; val : Value_Ptr'Class );
function As_List( ptr : Value_Ptr'Class ) return List_Ptr;
function As_Value( this : List_Ptr ) return Value_Ptr;
function Get( this : List_Ptr ) return access List_Value'Class;
Nul : constant List_Ptr;
private
package Value_Vectors is new Ada.Containers.Indefinite_Vectors( Positive, Value_Ptr, "=" );
type List_Value is new Value with
record
val : Value_Vectors.Vector;
end record;
type A_Naked_List is access all List_Value'Class;
overriding
procedure Delete( this : in out List_Value );
overriding
function Value_Input( stream : access Root_Stream_Type'Class ) return List_Value;
for List_Value'Input use Value_Input;
overriding
procedure Value_Read( stream : access Root_Stream_Type'Class; this : out List_Value );
for List_Value'Read use Value_Read;
procedure Value_Write( stream : access Root_Stream_Type'Class; this : List_Value );
for List_Value'Write use Value_Write;
type List_Ptr is new Value_Ptr with null record;
Nul : constant List_Ptr := (Value_Ptr with others => <>);
end Values.Lists;