| ------------------------------------------------------------------------------ |
| -- -- |
| -- GNAT RUN-TIME COMPONENTS -- |
| -- -- |
| -- A D A . C A L E N D A R . A R I T H M E T I C -- |
| -- -- |
| -- S p e c -- |
| -- -- |
| -- Copyright (C) 2005-2022, Free Software Foundation, Inc. -- |
| -- -- |
| -- This specification is derived from the Ada Reference Manual for use with -- |
| -- GNAT. In accordance with the copyright of that document, you can freely -- |
| -- copy and modify this specification, provided that if you redistribute a -- |
| -- modified version, any changes that you have made are clearly indicated. -- |
| -- -- |
| ------------------------------------------------------------------------------ |
| |
| -- This package provides arithmetic operations of time values using days |
| -- and leap seconds. Ada.Calendar.Arithmetic is defined in the Ada 2005 |
| -- RM (9.6.1). |
| |
| package Ada.Calendar.Arithmetic is |
| |
| -- Arithmetic on days: |
| |
| -- Rough estimate on the number of days over the range of Ada time |
| |
| type Day_Count is range |
| -(366 * (1 + Year_Number'Last - Year_Number'First)) |
| .. |
| +(366 * (1 + Year_Number'Last - Year_Number'First)); |
| |
| subtype Leap_Seconds_Count is Integer range -2047 .. 2047; |
| -- Count of leap seconds. Negative leap seconds occur whenever the |
| -- astronomical time is faster than the atomic time or as a result of |
| -- Difference when Left < Right. |
| |
| procedure Difference |
| (Left : Time; |
| Right : Time; |
| Days : out Day_Count; |
| Seconds : out Duration; |
| Leap_Seconds : out Leap_Seconds_Count); |
| -- Returns the difference between Left and Right. Days is the number of |
| -- days of difference, Seconds is the remainder seconds of difference |
| -- excluding leap seconds, and Leap_Seconds is the number of leap seconds. |
| -- If Left < Right, then Seconds <= 0.0, Days <= 0, and Leap_Seconds <= 0, |
| -- otherwise all values are nonnegative. The absolute value of Seconds is |
| -- always less than 86_400.0. For the returned values, if Days = 0, then |
| -- Seconds + Duration (Leap_Seconds) = Calendar."-" (Left, Right) |
| |
| function "+" (Left : Time; Right : Day_Count) return Time; |
| function "+" (Left : Day_Count; Right : Time) return Time; |
| -- Adds a number of days to a time value. Time_Error is raised if the |
| -- result is not representable as a value of type Time. |
| |
| function "-" (Left : Time; Right : Day_Count) return Time; |
| -- Subtracts a number of days from a time value. Time_Error is raised if |
| -- the result is not representable as a value of type Time. |
| |
| function "-" (Left : Time; Right : Time) return Day_Count; |
| -- Subtracts two time values, and returns the number of days between them. |
| -- This is the same value that Difference would return in Days. |
| |
| end Ada.Calendar.Arithmetic; |