home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C!T ROM 5
/
ctrom5b.zip
/
ctrom5b
/
PROGRAM
/
ADA
/
GNAT200
/
ADAINC
/
S-TASKIN.ADB
< prev
next >
Wrap
Text File
|
1994-11-30
|
4KB
|
93 lines
------------------------------------------------------------------------------
-- --
-- GNU ADA RUNTIME LIBRARY (GNARL) COMPONENTS --
-- --
-- S Y S T E M . T A S K I N G --
-- --
-- B o d y --
-- --
-- $Revision: 1.5 $ --
-- --
-- Copyright (c) 1991,1992,1993,1994, FSU, All Rights Reserved --
-- --
-- GNARL is free software; you can redistribute it and/or modify it under --
-- terms of the GNU Library General Public License as published by the --
-- Free Software Foundation; either version 2, or (at your option) any --
-- later version. GNARL is distributed in the hope that it will be use- --
-- ful, but but WITHOUT ANY WARRANTY; without even the implied warranty of --
-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Gen- --
-- eral Library Public License for more details. You should have received --
-- a copy of the GNU Library General Public License along with GNARL; see --
-- file COPYING.LIB. If not, write to the Free Software Foundation, 675 --
-- Mass Ave, Cambridge, MA 02139, USA. --
-- --
------------------------------------------------------------------------------
-- This package body has to be eliminated once the offset calulation for
-- ATCB is done statically. Also, the temporary placement of queuing
-- primitives has to move back to Tasking.Queuing. (compiler error) ???
with System.Task_Primitives;
-- Used for, Task_Primitives.TCB_Ptr,
-- Task_Primitives.Self
with System.Storage_Elements;
-- Used for, Storage_Elements.Storage_Offset,
-- Storage_Elements."-"
-- Storage_Elements.Storage_Count
with System.Tasking.Utilities;
-- Used for, Utilities.Ada_Task_Control_Block;
with Unchecked_Conversion;
package body System.Tasking is
function "-"
(A : System.Address;
B : System.Address)
return Storage_Elements.Storage_Offset
renames Storage_Elements."-";
function "-"
(A : System.Address;
I : Storage_Elements.Storage_Offset)
return System.Address
renames Storage_Elements."-";
function Get_LL_TCB_Offset return Storage_Elements.Storage_Count;
LL_TCB_Offset : Storage_Elements.Storage_Count := Get_LL_TCB_Offset;
function Address_To_Task_ID is new
Unchecked_Conversion (System.Address, Task_ID);
function TCB_Ptr_To_Address is new
Unchecked_Conversion (Task_Primitives.TCB_Ptr, System.Address);
-----------------------
-- Get_LL_TCB_Offset --
-----------------------
function Get_LL_TCB_Offset return Storage_Elements.Storage_Count is
ATCB_Record : Utilities.Ada_Task_Control_Block (0);
begin
return ATCB_Record.LL_TCB'Address - ATCB_Record'Address;
end Get_LL_TCB_Offset;
----------
-- Self --
----------
-- This is an INLINE_ONLY version of Self for use in the RTS.
function Self return Task_ID is
S : Task_Primitives.TCB_Ptr := Task_Primitives.Self;
begin
return Address_To_Task_ID (TCB_Ptr_To_Address (S) - LL_TCB_Offset);
end Self;
end System.Tasking;