with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
package Values.Strings is
type String_Value is new Value with private;
type String_Ptr is new Value_Ptr with private;
function Create( val : String ) return String_Ptr;
function Create( val : Unbounded_String ) return String_Ptr;
overriding
function Clone( this : access String_Value ) return Value_Ptr'Class;
overriding
function Compare( this : String_Value; other : Value'Class ) return Integer;
overriding
function Get_Type( this : String_Value ) return Value_Type;
overriding
function Image( this : String_Value ) return String;
function Length( this : String_Value ) return Natural;
function To_String( this : String_Value ) return String;
function "&"( l, r : String_Value ) return String_Ptr'Class;
function As_String( ptr : Value_Ptr'Class ) return String_Ptr;
function As_Value( this : String_Ptr ) return Value_Ptr;
function Get( this : String_Ptr ) return access String_Value'Class;
function "&"( l, r : String_Ptr ) return String_Ptr; pragma Inline( "&" );
function "="( l : String_Ptr; r : String ) return Boolean; pragma Inline( "=" );
function "="( l : String_Ptr; r : Unbounded_String ) return Boolean; pragma Inline( "=" );
function "<"( l : String_Ptr; r : String ) return Boolean; pragma Inline( "<" );
function "<"( l : String_Ptr; r : Unbounded_String ) return Boolean; pragma Inline( "<" );
function ">"( l : String_Ptr; r : String ) return Boolean; pragma Inline( ">" );
function ">"( l : String_Ptr; r : Unbounded_String ) return Boolean; pragma Inline( ">" );
function "<="( l : String_Ptr; r : String ) return Boolean; pragma Inline( "<=" );
function "<="( l : String_Ptr; r : Unbounded_String ) return Boolean; pragma Inline( "<=" );
function ">="( l : String_Ptr; r : String ) return Boolean; pragma Inline( ">=" );
function ">="( l : String_Ptr; r : Unbounded_String ) return Boolean; pragma Inline( ">=" );
function "&"( l : String_Ptr; r : String ) return String_Ptr; pragma Inline( "&" );
function "&"( l : String_Ptr; r : Unbounded_String ) return String_Ptr; pragma Inline( "&" );
function "="( l : String; r : String_Ptr ) return Boolean; pragma Inline( "=" );
function "="( l : Unbounded_String; r : String_Ptr ) return Boolean; pragma Inline( "=" );
function "<"( l : String; r : String_Ptr ) return Boolean; pragma Inline( "<" );
function "<"( l : Unbounded_String; r : String_Ptr ) return Boolean; pragma Inline( "<" );
function ">"( l : String; r : String_Ptr ) return Boolean; pragma Inline( ">" );
function ">"( l : Unbounded_String; r : String_Ptr ) return Boolean; pragma Inline( ">" );
function "<="( l : String; r : String_Ptr ) return Boolean; pragma Inline( "<=" );
function "<="( l : Unbounded_String; r : String_Ptr ) return Boolean; pragma Inline( "<=" );
function ">="( l : String; r : String_Ptr ) return Boolean; pragma Inline( ">=" );
function ">="( l : Unbounded_String; r : String_Ptr ) return Boolean; pragma Inline( ">=" );
function "&"( l : String; r : String_Ptr ) return String_Ptr; pragma Inline( "&" );
function "&"( l : Unbounded_String; r : String_Ptr ) return String_Ptr; pragma Inline( "&" );
Nul : constant String_Ptr;
function Escape( str : String ) return String;
private
type String_Value is new Value with
record
val : Unbounded_String;
end record;
type A_Naked_String is access all String_Value'Class;
overriding
function Value_Input( stream : access Root_Stream_Type'Class ) return String_Value;
for String_Value'Input use Value_Input;
overriding
procedure Value_Read( stream : access Root_Stream_Type'Class; this : out String_Value );
for String_Value'Read use Value_Read;
procedure Value_Write( stream : access Root_Stream_Type'Class; this : String_Value );
for String_Value'Write use Value_Write;
type String_Ptr is new Value_Ptr with null record;
Nul : constant String_Ptr := (Value_Ptr with others => <>);
end Values.Strings;