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;