Remove some compile time warnings about duplicate definitions.
[official-gcc.git] / gcc / ada / a-reatim.adb
blob4ed7ce7791bc00933b853da9c6fdfc9a91e10dac
1 ------------------------------------------------------------------------------
2 -- --
3 -- GNU ADA RUN-TIME LIBRARY (GNARL) COMPONENTS --
4 -- --
5 -- A D A . R E A L _ T I M E --
6 -- --
7 -- B o d y --
8 -- --
9 -- $Revision$
10 -- --
11 -- Copyright (C) 1991-2001, Florida State University --
12 -- --
13 -- GNARL is free software; you can redistribute it and/or modify it under --
14 -- terms of the GNU General Public License as published by the Free Soft- --
15 -- ware Foundation; either version 2, or (at your option) any later ver- --
16 -- sion. GNARL is distributed in the hope that it will be useful, but WITH- --
17 -- OUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY --
18 -- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License --
19 -- for more details. You should have received a copy of the GNU General --
20 -- Public License distributed with GNARL; see file COPYING. If not, write --
21 -- to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, --
22 -- MA 02111-1307, USA. --
23 -- --
24 -- As a special exception, if other files instantiate generics from this --
25 -- unit, or you link this unit with other files to produce an executable, --
26 -- this unit does not by itself cause the resulting executable to be --
27 -- covered by the GNU General Public License. This exception does not --
28 -- however invalidate any other reasons why the executable file might be --
29 -- covered by the GNU Public License. --
30 -- --
31 -- GNARL was developed by the GNARL team at Florida State University. It is --
32 -- now maintained by Ada Core Technologies Inc. in cooperation with Florida --
33 -- State University (http://www.gnat.com). --
34 -- --
35 ------------------------------------------------------------------------------
37 with System.Task_Primitives.Operations;
38 -- used for Monotonic_Clock
40 package body Ada.Real_Time is
42 ---------
43 -- "*" --
44 ---------
46 -- Note that Constraint_Error may be propagated
48 function "*" (Left : Time_Span; Right : Integer) return Time_Span is
49 begin
50 return Time_Span (Duration (Left) * Right);
51 end "*";
53 function "*" (Left : Integer; Right : Time_Span) return Time_Span is
54 begin
55 return Time_Span (Left * Duration (Right));
56 end "*";
58 ---------
59 -- "+" --
60 ---------
62 -- Note that Constraint_Error may be propagated
64 function "+" (Left : Time; Right : Time_Span) return Time is
65 begin
66 return Time (Duration (Left) + Duration (Right));
67 end "+";
69 function "+" (Left : Time_Span; Right : Time) return Time is
70 begin
71 return Time (Duration (Left) + Duration (Right));
72 end "+";
74 function "+" (Left, Right : Time_Span) return Time_Span is
75 begin
76 return Time_Span (Duration (Left) + Duration (Right));
77 end "+";
79 ---------
80 -- "-" --
81 ---------
83 -- Note that Constraint_Error may be propagated
85 function "-" (Left : Time; Right : Time_Span) return Time is
86 begin
87 return Time (Duration (Left) - Duration (Right));
88 end "-";
90 function "-" (Left, Right : Time) return Time_Span is
91 begin
92 return Time_Span (Duration (Left) - Duration (Right));
93 end "-";
95 function "-" (Left, Right : Time_Span) return Time_Span is
96 begin
97 return Time_Span (Duration (Left) - Duration (Right));
98 end "-";
100 function "-" (Right : Time_Span) return Time_Span is
101 begin
102 return Time_Span_Zero - Right;
103 end "-";
105 ---------
106 -- "/" --
107 ---------
109 -- Note that Constraint_Error may be propagated
111 function "/" (Left, Right : Time_Span) return Integer is
112 begin
113 return Integer (Duration (Left) / Duration (Right));
114 end "/";
116 function "/" (Left : Time_Span; Right : Integer) return Time_Span is
117 begin
118 return Time_Span (Duration (Left) / Right);
119 end "/";
121 -----------
122 -- Clock --
123 -----------
125 function Clock return Time is
126 begin
127 return Time (System.Task_Primitives.Operations.Monotonic_Clock);
128 end Clock;
130 ------------------
131 -- Microseconds --
132 ------------------
134 function Microseconds (US : Integer) return Time_Span is
135 begin
136 return Time_Span_Unit * US * 1_000;
137 end Microseconds;
139 ------------------
140 -- Milliseconds --
141 ------------------
143 function Milliseconds (MS : Integer) return Time_Span is
144 begin
145 return Time_Span_Unit * MS * 1_000_000;
146 end Milliseconds;
148 -----------------
149 -- Nanoseconds --
150 -----------------
152 function Nanoseconds (NS : Integer) return Time_Span is
153 begin
154 return Time_Span_Unit * NS;
155 end Nanoseconds;
157 -----------
158 -- Split --
159 -----------
161 procedure Split (T : Time; SC : out Seconds_Count; TS : out Time_Span) is
162 T_Val : Time;
164 begin
165 -- Special-case for Time_First, whose absolute value is anomalous,
166 -- courtesy of two's complement.
168 if T = Time_First then
169 T_Val := abs (Time_Last);
170 else
171 T_Val := abs (T);
172 end if;
174 -- Extract the integer part of T, truncating towards zero.
176 if T_Val < 0.5 then
177 SC := 0;
179 else
180 SC := Seconds_Count (Time_Span' (T_Val - 0.5));
181 end if;
183 if T < 0.0 then
184 SC := -SC;
185 end if;
187 -- If original time is negative, need to truncate towards negative
188 -- infinity, to make TS non-negative, as per ARM.
190 if Time (SC) > T then
191 SC := SC - 1;
192 end if;
194 TS := T - Time (SC);
195 end Split;
197 -------------
198 -- Time_Of --
199 -------------
201 function Time_Of (SC : Seconds_Count; TS : Time_Span) return Time is
202 begin
203 return Time (SC) + TS;
204 end Time_Of;
206 -----------------
207 -- To_Duration --
208 -----------------
210 function To_Duration (TS : Time_Span) return Duration is
211 begin
212 return Duration (TS);
213 end To_Duration;
215 ------------------
216 -- To_Time_Span --
217 ------------------
219 function To_Time_Span (D : Duration) return Time_Span is
220 begin
221 return Time_Span (D);
222 end To_Time_Span;
224 end Ada.Real_Time;