File : a-sytaco-xi.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-2016, 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 --  This is the generic bare board version of this package
  37 
  38 with System.Tasking;
  39 
  40 with Ada.Task_Identification;
  41 
  42 package Ada.Synchronous_Task_Control with
  43   SPARK_Mode
  44 is
  45    pragma Preelaborate;
  46    --  In accordance with Ada 2005 AI-362
  47 
  48    type Suspension_Object is limited private;
  49    --  There was a 'Default_Initial_Condition' but it is removed as it resulted
  50    --  in an undefined symbol.
  51 
  52    procedure Set_True (S : in out Suspension_Object) with
  53      Global  => null,
  54      Depends => (S    => null,
  55                  null => S);
  56 
  57    procedure Set_False (S : in out Suspension_Object) with
  58      Global  => null,
  59      Depends => (S    => null,
  60                  null => S);
  61 
  62    function Current_State (S : Suspension_Object) return Boolean with
  63      Volatile_Function,
  64      Global => Ada.Task_Identification.Tasking_State;
  65 
  66    procedure Suspend_Until_True (S : in out Suspension_Object) with
  67      Global  => null,
  68      Depends => (S    => null,
  69                  null => S);
  70 
  71 private
  72    pragma SPARK_Mode (Off);
  73 
  74    --  Using a protected object may seem overkill, but assuming the
  75    --  appropriate restrictions (such as those imposed by the Ravenscar
  76    --  profile) protected operations are very efficient. Moreover, this
  77    --  allows for a generic implementation that is not dependent on the
  78    --  underlying operating system.
  79 
  80    protected type Suspension_Object is
  81       entry Wait;
  82       procedure Set_False;
  83       procedure Set_True;
  84       function Get_Open return Boolean;
  85 
  86       pragma Interrupt_Priority;
  87    private
  88       Open : Boolean := False;
  89       --  Status
  90    end Suspension_Object;
  91 
  92 end Ada.Synchronous_Task_Control;