File : a-sytaco.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --         A D A . S Y N C H R O N O U S _ T A S K _ C O N T R O L          --
   6 --                                                                          --
   7 --                                 S p e c                                  --
   8 --                                                                          --
   9 --          Copyright (C) 1992-2015, 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 --                                                                          --
  23 --                                                                          --
  24 --                                                                          --
  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 
  36 with System.Task_Primitives;
  37 
  38 with Ada.Finalization;
  39 with Ada.Task_Identification;
  40 
  41 package Ada.Synchronous_Task_Control with
  42   SPARK_Mode
  43 is
  44    pragma Preelaborate;
  45    --  In accordance with Ada 2005 AI-362
  46 
  47    type Suspension_Object is limited private with
  48      Default_Initial_Condition;
  49 
  50    procedure Set_True (S : in out Suspension_Object) with
  51      Global  => null,
  52      Depends => (S    => null,
  53                  null => S);
  54 
  55    procedure Set_False (S : in out Suspension_Object) with
  56      Global  => null,
  57      Depends => (S    => null,
  58                  null => S);
  59 
  60    function Current_State (S : Suspension_Object) return Boolean with
  61      Volatile_Function,
  62      Global => Ada.Task_Identification.Tasking_State;
  63 
  64    procedure Suspend_Until_True (S : in out Suspension_Object) with
  65      Global  => null,
  66      Depends => (S    => null,
  67                  null => S);
  68 
  69 private
  70    pragma SPARK_Mode (Off);
  71 
  72    procedure Initialize (S : in out Suspension_Object);
  73    --  Initialization for Suspension_Object
  74 
  75    procedure Finalize (S : in out Suspension_Object);
  76    --  Finalization for Suspension_Object
  77 
  78    type Suspension_Object is
  79      new Ada.Finalization.Limited_Controlled with
  80    record
  81       SO : System.Task_Primitives.Suspension_Object;
  82       --  Use low-level suspension objects so that the synchronization
  83       --  functionality provided by this object can be achieved using
  84       --  efficient operating system primitives.
  85    end record;
  86 
  87    pragma Inline (Set_True);
  88    pragma Inline (Set_False);
  89    pragma Inline (Current_State);
  90    pragma Inline (Suspend_Until_True);
  91    pragma Inline (Initialize);
  92    pragma Inline (Finalize);
  93 
  94 end Ada.Synchronous_Task_Control;