1------------------------------------------------------------------------------
2--                                                                          --
3--                         GNAT RUN-TIME COMPONENTS                         --
4--                                                                          --
5--                   A D A . E X E C U T I O N _ T I M E                    --
6--                                                                          --
7--                                 S p e c                                  --
8--                                                                          --
9-- This specification is derived from the Ada Reference Manual for use with --
10-- GNAT.  In accordance with the copyright of that document, you can freely --
11-- copy and modify this specification,  provided that if you redistribute a --
12-- modified version,  any changes that you have made are clearly indicated. --
13--                                                                          --
14------------------------------------------------------------------------------
15
16--  This unit is not implemented in typical GNAT implementations that lie on
17--  top of operating systems, because it is infeasible to implement in such
18--  environments.
19
20--  If a target environment provides appropriate support for this package
21--  then the Unimplemented_Unit pragma should be removed from this spec and
22--  an appropriate body provided.
23
24with Ada.Task_Identification;
25with Ada.Real_Time;
26
27package Ada.Execution_Time with
28  SPARK_Mode
29is
30   pragma Preelaborate;
31
32   pragma Unimplemented_Unit;
33
34   type CPU_Time is private;
35
36   CPU_Time_First : constant CPU_Time;
37   CPU_Time_Last  : constant CPU_Time;
38   CPU_Time_Unit  : constant := 0.000001;
39   CPU_Tick       : constant Ada.Real_Time.Time_Span;
40
41   use type Ada.Task_Identification.Task_Id;
42
43   function Clock
44     (T : Ada.Task_Identification.Task_Id :=
45        Ada.Task_Identification.Current_Task)
46      return CPU_Time
47   with
48     Volatile_Function,
49     Global => Ada.Real_Time.Clock_Time,
50     Pre    => T /= Ada.Task_Identification.Null_Task_Id;
51
52   function "+"
53     (Left  : CPU_Time;
54      Right : Ada.Real_Time.Time_Span) return CPU_Time
55   with
56     Global => null;
57
58   function "+"
59     (Left  : Ada.Real_Time.Time_Span;
60      Right : CPU_Time) return CPU_Time
61   with
62     Global => null;
63
64   function "-"
65     (Left  : CPU_Time;
66      Right : Ada.Real_Time.Time_Span) return CPU_Time
67   with
68     Global => null;
69
70   function "-"
71     (Left  : CPU_Time;
72      Right : CPU_Time) return Ada.Real_Time.Time_Span
73   with
74     Global => null;
75
76   function "<"  (Left, Right : CPU_Time) return Boolean with
77     Global => null;
78   function "<=" (Left, Right : CPU_Time) return Boolean with
79     Global => null;
80   function ">"  (Left, Right : CPU_Time) return Boolean with
81     Global => null;
82   function ">=" (Left, Right : CPU_Time) return Boolean with
83     Global => null;
84
85   procedure Split
86     (T  : CPU_Time;
87      SC : out Ada.Real_Time.Seconds_Count;
88      TS : out Ada.Real_Time.Time_Span)
89   with
90     Global => null;
91
92   function Time_Of
93     (SC : Ada.Real_Time.Seconds_Count;
94      TS : Ada.Real_Time.Time_Span := Ada.Real_Time.Time_Span_Zero)
95      return CPU_Time
96   with
97     Global => null;
98
99   Interrupt_Clocks_Supported          : constant Boolean := False;
100   Separate_Interrupt_Clocks_Supported : constant Boolean := False;
101
102   pragma Warnings (Off, "check will fail at run time");
103   function Clock_For_Interrupts return CPU_Time with
104     Volatile_Function,
105     Global => Ada.Real_Time.Clock_Time,
106     Pre    => Interrupt_Clocks_Supported;
107   pragma Warnings (On, "check will fail at run time");
108
109private
110   pragma SPARK_Mode (Off);
111
112   type CPU_Time is new Ada.Real_Time.Time;
113
114   CPU_Time_First : constant CPU_Time  := CPU_Time (Ada.Real_Time.Time_First);
115   CPU_Time_Last  : constant CPU_Time  := CPU_Time (Ada.Real_Time.Time_Last);
116
117   CPU_Tick : constant Ada.Real_Time.Time_Span := Ada.Real_Time.Tick;
118
119end Ada.Execution_Time;
120