private with Recycling_Pools;
package Pool_Testing is
type Car is abstract tagged private;
type A_Car is access all Car'Class;
procedure Drive( this : access Car );
procedure Delete( this : in out A_Car );
procedure Destroy( this : access Car ) is abstract;
type Audi is new Car with private;
type A_Audi is access all Audi'Class;
function Create_Audi return A_Audi;
procedure Go;
private
use Recycling_Pools;
type Car is abstract tagged
record
topSpeed : Integer := 0;
end record;
procedure Construct( this : access Car;
topSpeed : Integer );
procedure Destruct( this : access Car );
audi_pool : Recycling_Pool;
for A_Audi'Storage_Pool use audi_pool;
type Audi is new Car with
record
tipTronic : Boolean := True;
end record;
procedure Construct( this : access Audi;
topSpeed : Integer;
tipTronic : Boolean );
procedure Drive( this : access Audi );
procedure Destruct( this : access Audi );
procedure Destroy( this : access Audi );
end Pool_Testing;