File : a-reatim-raven-sfp.ads


   1 ------------------------------------------------------------------------------
   2 --                                                                          --
   3 --                         GNAT RUN-TIME COMPONENTS                         --
   4 --                                                                          --
   5 --                         A D A . R E A L _ T I M E                        --
   6 --                                                                          --
   7 --                                  S p e c                                 --
   8 --                                                                          --
   9 --                     Copyright (C) 2001-2015, AdaCore                     --
  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 Ravenscar/HI-E version of this package for VxWorks 5
  37 
  38 package Ada.Real_Time with
  39   SPARK_Mode,
  40   Abstract_State => (Clock_Time with Synchronous,
  41                                      External => (Async_Readers,
  42                                                   Async_Writers)),
  43   Initializes    => Clock_Time
  44 is
  45 
  46    type Time is private;
  47    Time_First : constant Time;
  48    Time_Last  : constant Time;
  49    Time_Unit  : constant := 10#1.0#E-4;
  50 
  51    type Time_Span is private;
  52    Time_Span_First : constant Time_Span;
  53    Time_Span_Last  : constant Time_Span;
  54    Time_Span_Zero  : constant Time_Span;
  55    Time_Span_Unit  : constant Time_Span;
  56 
  57    Tick : constant Time_Span;
  58    function Clock return Time with
  59      Volatile_Function,
  60      Global => Clock_Time;
  61 
  62    function "+"  (Left : Time;      Right : Time_Span) return Time;
  63    function "+"  (Left : Time_Span; Right : Time)      return Time;
  64    function "-"  (Left : Time;      Right : Time_Span) return Time;
  65    function "-"  (Left : Time;      Right : Time)      return Time_Span;
  66 
  67    function "<"  (Left, Right : Time) return Boolean;
  68    function "<=" (Left, Right : Time) return Boolean;
  69    function ">"  (Left, Right : Time) return Boolean;
  70    function ">=" (Left, Right : Time) return Boolean;
  71 
  72    function "+"  (Left, Right : Time_Span)             return Time_Span;
  73    function "-"  (Left, Right : Time_Span)             return Time_Span;
  74    function "-"  (Right : Time_Span)                   return Time_Span;
  75    function "*"  (Left : Time_Span; Right : Integer)   return Time_Span;
  76    function "*"  (Left : Integer;   Right : Time_Span) return Time_Span;
  77    function "/"  (Left, Right : Time_Span)             return Integer;
  78    function "/"  (Left : Time_Span; Right : Integer)   return Time_Span;
  79 
  80    function "abs" (Right : Time_Span) return Time_Span;
  81 
  82    function "<"  (Left, Right : Time_Span) return Boolean;
  83    function "<=" (Left, Right : Time_Span) return Boolean;
  84    function ">"  (Left, Right : Time_Span) return Boolean;
  85    function ">=" (Left, Right : Time_Span) return Boolean;
  86 
  87    function To_Duration  (TS : Time_Span) return Duration;
  88    function To_Time_Span (D : Duration)   return Time_Span;
  89 
  90    function Nanoseconds  (NS : Integer) return Time_Span;
  91    function Microseconds (US : Integer) return Time_Span;
  92    function Milliseconds (MS : Integer) return Time_Span;
  93 
  94    function Seconds (S : Integer) return Time_Span;
  95    pragma Ada_05 (Seconds);
  96 
  97    function Minutes (M : Integer) return Time_Span;
  98    pragma Ada_05 (Minutes);
  99 
 100    --  32 bits is enough for representing Seconds_Count. Time is a 32-bit
 101    --  unsigned integer, and it then gets divided by the system clock rate.
 102 
 103    type Seconds_Count is range 0 .. 2 ** 31 - 1;
 104 
 105    procedure Split (T : Time; SC : out Seconds_Count; TS : out Time_Span);
 106    function Time_Of (SC : Seconds_Count; TS : Time_Span) return Time;
 107 
 108 private
 109    pragma SPARK_Mode (Off);
 110 
 111    type Time is mod 2 ** Long_Integer'Size;
 112 
 113    Time_First : constant Time := Time'First;
 114 
 115    Time_Last  : constant Time := Time'Last;
 116 
 117    type Time_Span is new Long_Integer;
 118 
 119    Time_Span_First : constant Time_Span := Time_Span'First;
 120 
 121    Time_Span_Last  : constant Time_Span := Time_Span'Last;
 122 
 123    Time_Span_Zero  : constant Time_Span := 0;
 124 
 125    Time_Span_Unit  : constant Time_Span := 1;
 126 
 127    Tick : constant Time_Span := 1;
 128 
 129    pragma Import (Intrinsic, "<");
 130    pragma Import (Intrinsic, "<=");
 131    pragma Import (Intrinsic, ">");
 132    pragma Import (Intrinsic, ">=");
 133    pragma Import (Intrinsic, "abs");
 134 
 135    pragma Inline (Microseconds);
 136    pragma Inline (Milliseconds);
 137    pragma Inline (Nanoseconds);
 138    pragma Inline (Seconds);
 139    pragma Inline (Minutes);
 140 
 141 end Ada.Real_Time;