1------------------------------------------------------------------------------ 2-- -- 3-- GNAT COMPILER COMPONENTS -- 4-- -- 5-- S Y S T E M . S T O R A G E _ P O O L S -- 6-- -- 7-- S p e c -- 8-- -- 9-- Copyright (C) 1992-2018, Free Software Foundation, Inc. -- 10-- -- 11-- This specification is derived from the Ada Reference Manual for use with -- 12-- GNAT. The copyright notice above, and the license provisions that follow -- 13-- apply solely to the contents of the part following the private keyword. -- 14-- -- 15-- GNAT is free software; you can redistribute it and/or modify it under -- 16-- terms of the GNU General Public License as published by the Free Soft- -- 17-- ware Foundation; either version 3, or (at your option) any later ver- -- 18-- sion. GNAT is distributed in the hope that it will be useful, but WITH- -- 19-- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY -- 20-- or FITNESS FOR A PARTICULAR PURPOSE. -- 21-- -- 22-- As a special exception under Section 7 of GPL version 3, you are granted -- 23-- additional permissions described in the GCC Runtime Library Exception, -- 24-- version 3.1, as published by the Free Software Foundation. -- 25-- -- 26-- You should have received a copy of the GNU General Public License and -- 27-- a copy of the GCC Runtime Library Exception along with this program; -- 28-- see the files COPYING3 and COPYING.RUNTIME respectively. If not, see -- 29-- <http://www.gnu.org/licenses/>. -- 30-- -- 31-- GNAT was originally developed by the GNAT team at New York University. -- 32-- Extensive contributions were provided by Ada Core Technologies Inc. -- 33-- -- 34------------------------------------------------------------------------------ 35 36with Ada.Finalization; 37with System.Storage_Elements; 38 39package System.Storage_Pools is 40 pragma Preelaborate; 41 42 type Root_Storage_Pool is abstract 43 new Ada.Finalization.Limited_Controlled with private; 44 pragma Preelaborable_Initialization (Root_Storage_Pool); 45 46 procedure Allocate 47 (Pool : in out Root_Storage_Pool; 48 Storage_Address : out System.Address; 49 Size_In_Storage_Elements : System.Storage_Elements.Storage_Count; 50 Alignment : System.Storage_Elements.Storage_Count) 51 is abstract; 52 53 procedure Deallocate 54 (Pool : in out Root_Storage_Pool; 55 Storage_Address : System.Address; 56 Size_In_Storage_Elements : System.Storage_Elements.Storage_Count; 57 Alignment : System.Storage_Elements.Storage_Count) 58 is abstract; 59 60 function Storage_Size 61 (Pool : Root_Storage_Pool) 62 return System.Storage_Elements.Storage_Count 63 is abstract; 64 65private 66 type Root_Storage_Pool is abstract 67 new Ada.Finalization.Limited_Controlled with null record; 68 69 type Root_Storage_Pool_Ptr is access all Root_Storage_Pool'Class; 70 for Root_Storage_Pool_Ptr'Storage_Size use 0; 71 -- Type of the BIP_Storage_Pool extra parameter (see Exp_Ch6). The 72 -- Storage_Size clause is necessary, because otherwise we have a 73 -- chicken&egg problem; we can't be creating collection finalization code 74 -- in this low-level package, because that involves Pool_Global, which 75 -- imports this package. 76 77 -- ??? Are these two still needed? It might be possible to use Subpools. 78 -- Allocate_Any_Controlled / Deallocate_Any_Controlled for non-controlled 79 -- objects. 80 81 -- The following two procedures support the use of class-wide pool 82 -- objects in storage pools. When a local type is given a class-wide 83 -- storage pool, allocation and deallocation for the type must dispatch 84 -- to the operation of the specific pool, which is achieved by a call 85 -- to these procedures. (When the pool type is specific, the back-end 86 -- generates a call to the statically identified operation of the type). 87 88 procedure Allocate_Any 89 (Pool : in out Root_Storage_Pool'Class; 90 Storage_Address : out System.Address; 91 Size_In_Storage_Elements : System.Storage_Elements.Storage_Count; 92 Alignment : System.Storage_Elements.Storage_Count); 93 94 procedure Deallocate_Any 95 (Pool : in out Root_Storage_Pool'Class; 96 Storage_Address : System.Address; 97 Size_In_Storage_Elements : System.Storage_Elements.Storage_Count; 98 Alignment : System.Storage_Elements.Storage_Count); 99 100end System.Storage_Pools; 101