package Values.Booleans is
type Boolean_Value is new Value with private;
type Boolean_Ptr is new Value_Ptr with private;
function Create( val : Boolean ) return Boolean_Ptr;
overriding
function Clone( this : access Boolean_Value ) return Value_Ptr'Class;
overriding
function Compare( this : Boolean_Value; other : Value'Class ) return Integer;
overriding
function Get_Type( this : Boolean_Value ) return Value_Type;
overriding
function Image( this : Boolean_Value ) return String;
function To_Boolean( this : Boolean_Value ) return Boolean;
function "not"( l : Boolean_Value ) return Boolean_Ptr'Class; pragma Inline( "not" );
function "and"( l, r : Boolean_Value ) return Boolean_Ptr'Class; pragma Inline( "and" );
function "or"( l, r : Boolean_Value ) return Boolean_Ptr'Class; pragma Inline( "or" );
function "xor"( l, r : Boolean_Value ) return Boolean_Ptr'Class; pragma Inline( "xor" );
function As_Boolean( ptr : Value_Ptr'Class ) return Boolean_Ptr;
function As_Value( this : Boolean_Ptr ) return Value_Ptr;
function Get( this : Boolean_Ptr ) return access Boolean_Value'Class; pragma Inline( Get );
function "not"( l : Boolean_Ptr ) return Boolean_Ptr; pragma Inline( "not" );
function "and"( l, r : Boolean_Ptr ) return Boolean_Ptr; pragma Inline( "and" );
function "or"( l, r : Boolean_Ptr ) return Boolean_Ptr; pragma Inline( "or" );
function "xor"( l, r : Boolean_Ptr ) return Boolean_Ptr; pragma Inline( "xor" );
function "="( l : Boolean_Ptr; r : Boolean ) return Boolean; pragma Inline( "=" );
function "and"( l : Boolean_Ptr; r : Boolean ) return Boolean_Ptr; pragma Inline( "and" );
function "or"( l : Boolean_Ptr; r : Boolean ) return Boolean_Ptr; pragma Inline( "or" );
function "xor"( l : Boolean_Ptr; r : Boolean ) return Boolean_Ptr; pragma Inline( "xor" );
function "="( l : Boolean; r : Boolean_Ptr ) return Boolean; pragma Inline( "=" );
function "and"( l : Boolean; r : Boolean_Ptr ) return Boolean_Ptr; pragma Inline( "and" );
function "or"( l : Boolean; r : Boolean_Ptr ) return Boolean_Ptr; pragma Inline( "or" );
function "xor"( l : Boolean; r : Boolean_Ptr ) return Boolean_Ptr; pragma Inline( "xor" );
Nul : constant Boolean_Ptr;
private
type Boolean_Value is new Value with
record
val : Boolean := False;
end record;
type A_Naked_Boolean is access all Boolean_Value'Class;
overriding
function Value_Input( stream : access Root_Stream_Type'Class ) return Boolean_Value;
for Boolean_Value'Input use Value_Input;
overriding
procedure Value_Read( stream : access Root_Stream_Type'Class; this : out Boolean_Value );
for Boolean_Value'Read use Value_Read;
procedure Value_Write( stream : access Root_Stream_Type'Class; this : Boolean_Value );
for Boolean_Value'Write use Value_Write;
type Boolean_Ptr is new Value_Ptr with null record;
Nul : constant Boolean_Ptr := (Value_Ptr with others => <>);
end Values.Booleans;