with Ada.Streams; use Ada.Streams;
with Objects; use Objects;
with Values; use Values;
private with Ada.Containers.Indefinite_Ordered_Maps;
private with Ada.Strings.Less_Case_Insensitive;
package Associations is
type Association is new Object with private;
type A_Association is access all Association'Class;
function Create_Association return A_Association;
pragma Postcondition( Create_Association'Result /= null );
function As_Boolean( this : access Association; name : String ) return Boolean;
pragma Precondition( name'Length > 0 );
function As_Integer( this : access Association; name : String ) return Integer;
pragma Precondition( name'Length > 0 );
function As_String( this : access Association; name : String ) return String;
pragma Precondition( name'Length > 0 );
function Is_Defined( this : access Association; name : String ) return Boolean;
procedure Iterate( this : access Association;
examine : not null access procedure( name : String;
value : A_Value ) );
function Length( this : access Association ) return Natural;
function Object_Input( stream : access Root_Stream_Type'Class ) return Association;
procedure Remove( this : access Association; name : String );
pragma Precondition( name'Length > 0 );
procedure Set_Default( this : access Association; name : String; val : Boolean );
pragma Precondition( name'Length > 0 );
procedure Set_Default( this : access Association; name : String; val : Integer );
pragma Precondition( name'Length > 0 );
procedure Set_Default( this : access Association; name : String; val : String );
pragma Precondition( name'Length > 0 );
procedure Set_Default( this : access Association;
name : String;
val : in out A_Value );
pragma Precondition( name'Length > 0 );
procedure Set_Value( this : access Association; name : String; val : Boolean );
pragma Precondition( name'Length > 0 );
procedure Set_Value( this : access Association; name : String; val : Integer );
pragma Precondition( name'Length > 0 );
procedure Set_Value( this : access Association; name : String; val : String );
pragma Precondition( name'Length > 0 );
procedure Set_Value( this : access Association;
name : String;
val : in out A_Value );
pragma Precondition( name'Length > 0 );
pragma Precondition( val /= null );
pragma Postcondition( val = null );
function Copy( src : A_Association ) return A_Association;
pragma Postcondition( Copy'Result /= src or else src = null );
procedure Delete( this : in out A_Association );
pragma Postcondition( this = null );
private
package Value_Maps is new
Ada.Containers.Indefinite_Ordered_Maps( String, A_Value,
Ada.Strings.Less_Case_Insensitive,
"=" );
use Value_Maps;
type Association is new Object with
record
pairs : Value_Maps.Map;
end record;
procedure Adjust( this : access Association );
procedure Delete( this : in out Association );
function To_String( this : access Association ) return String;
for Association'Input use Object_Input;
procedure Object_Read( stream : access Root_Stream_Type'Class;
obj : out Association );
for Association'Read use Object_Read;
procedure Object_Write( stream : access Root_Stream_Type'Class;
obj : Association );
for Association'Write use Object_Write;
function A_Association_Input( stream : access Root_Stream_Type'Class ) return A_Association;
for A_Association'Input use A_Association_Input;
procedure A_Association_Output( stream : access Root_Stream_Type'Class;
obj : A_Association );
for A_Association'Output use A_Association_Output;
procedure A_Association_Read( stream : access Root_Stream_Type'Class;
obj : out A_Association );
for A_Association'Read use A_Association_Read;
procedure A_Association_Write( stream : access Root_Stream_Type'Class;
obj : A_Association );
for A_Association'Write use A_Association_Write;
end Associations;