blob: b454a2c5174323358c32d9cbc638b43f11afbe4b [file] [log] [blame]
generic
type Component is private;
type List_Index is range <>;
type List is array (List_Index range <>) of Component;
Default_Value : Component;
-- with function "=" (Left, Right : List) return Boolean is <>;
package Equal8_Pkg is
pragma Pure;
Maximum_Length : constant List_Index := List_Index'Last;
subtype Natural_Index is List_Index'Base range 0 .. Maximum_Length;
type Sequence (Capacity : Natural_Index) is private;
-- from zero to Capacity.
function Value (This : Sequence) return List;
-- Returns the content of this sequence. The value returned is the
-- "logical" value in that only that slice which is currently assigned
-- is returned, as opposed to the entire physical representation.
overriding
function "=" (Left, Right : Sequence) return Boolean with
Inline;
function "=" (Left : Sequence; Right : List) return Boolean with
Inline;
private
type Sequence (Capacity : Natural_Index) is record
Current_Length : Natural_Index := 0;
Content : List (1 .. Capacity) := (others => Default_Value);
end record;
-----------
-- Value --
-----------
function Value (This : Sequence) return List is
(This.Content (1 .. This.Current_Length));
---------
-- "=" --
---------
overriding
function "=" (Left, Right : Sequence) return Boolean is
(Value (Left) = Value (Right));
---------
-- "=" --
---------
function "=" (Left : Sequence; Right : List) return Boolean is
(Value (Left) = Right);
end Equal8_Pkg;