package Values.Ids is
type Id_Value is new Value with private;
type Id_Ptr is new Value_Ptr with private;
function Create( val : Unsigned_64 ) return Id_Ptr;
overriding
function Clone( this : access Id_Value ) return Value_Ptr'Class;
overriding
function Compare( this : Id_Value; other : Value'Class ) return Integer;
overriding
function Get_Type( this : Id_Value ) return Value_Type;
overriding
function Image( this : Id_Value ) return String;
function To_Unsigned_64( this : Id_Value ) return Unsigned_64;
function As_Id( ptr : Value_Ptr'Class ) return Id_Ptr;
function As_Value( this : Id_Ptr ) return Value_Ptr;
function Get( this : Id_Ptr ) return access Id_Value'Class; pragma Inline( Get );
Nul : constant Id_Ptr;
private
type Id_Value is new Value with
record
val : Unsigned_64 := 0;
end record;
type A_Naked_Id is access all Id_Value'Class;
overriding
function Value_Input( stream : access Root_Stream_Type'Class ) return Id_Value;
for Id_Value'Input use Value_Input;
overriding
procedure Value_Read( stream : access Root_Stream_Type'Class; this : out Id_Value );
for Id_Value'Read use Value_Read;
procedure Value_Write( stream : access Root_Stream_Type'Class; this : Id_Value );
for Id_Value'Write use Value_Write;
type Id_Ptr is new Value_Ptr with null record;
Nul : constant Id_Ptr := (Value_Ptr with others => <>);
end Values.Ids;