AARM95 - Example of a Generic Package
Author: JTC1/SC22/WG9/ARG, by Randall Brukardt, ARG Editor

Contents Index Previous Next

# 12.8 Example of a Generic Package

1
The following example provides a possible formulation of stacks by means of a generic package. The size of each stack and the type of the stack elements are provided as generic formal parameters.

#### Examples

2/1
This paragraph was deleted.
3
`generic
Size : Positive;
type Item is private;
package Stack is
procedure Push(E : in Item);
procedure Pop (E : out Item);
Overflow, Underflow : exception;
end Stack;`
4
`package body Stack is`
5
`type Table is array (Positive range <>) of Item;
Space : Table(1 .. Size);
Index : Natural := 0;`
6
`procedure Push(E : in Item) is
begin
if Index >= Size then
raise Overflow;
end if;
Index := Index + 1;
Space(Index) := E;
end Push;`
7
`procedure Pop(E : out Item) is
begin
if Index = 0 then
raise Underflow;
end if;
E := Space(Index);
Index := Index - 1;
end Pop;`
8
`end Stack;`
9
Instances of this generic package can be obtained as follows:
10
`package Stack_Int is new Stack(Size => 200, Item => Integer);
package Stack_Bool is new Stack(100, Boolean);`
11
Thereafter, the procedures of the instantiated packages can be called as follows:
12
`Stack_Int.Push(N);
Stack_Bool.Push(True);`
13
Alternatively, a generic formulation of the type Stack can be given as follows (package body omitted):
14
`generic
type Item is private;
package On_Stacks is
type Stack(Size : Positive) is limited private;
procedure Push(S : in out Stack; E : in Item);
procedure Pop (S : in out Stack; E : out Item);
Overflow, Underflow : exception;
private
type Table is array (Positive range <>) of Item;
type Stack(Size : Positive) is
record
Space : Table(1 .. Size);
Index : Natural := 0;
end record;
end On_Stacks;`
15
In order to use such a package, an instance has to be created and thereafter stacks of the corresponding type can be declared:
16
`declare
package Stack_Real is new On_Stacks(Real); use Stack_Real;
S : Stack(100);
begin
...
Push(S, 2.54);
...
end;`

Contents Index Previous Next Legal