summaryrefslogtreecommitdiff
path: root/gcc/ada/a-calend.ads
diff options
context:
space:
mode:
authorcharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2006-10-31 17:44:55 +0000
committercharlet <charlet@138bc75d-0d04-0410-961f-82ee72b054a4>2006-10-31 17:44:55 +0000
commitd68c9dadbe2c8fda2039b574af7201427c09a77e (patch)
tree203369273dd14a7ee74aea51ee6f81faf1d82050 /gcc/ada/a-calend.ads
parente26ebbeea9b05be79828e144c7db6445fc6378bc (diff)
downloadgcc-d68c9dadbe2c8fda2039b574af7201427c09a77e.tar.gz
2006-10-31 Hristian Kirtchev <kirtchev@adacore.com>
Jose Ruiz <ruiz@adacore.com> * a-calend-vms.adb (Leap_Sec_Ops): Temp body for package in private part of Ada.Calendar: all subprogram raise Unimplemented. (Split_W_Offset): Temp function body, raising Unimplemented * a-calend.ads, a-calend-vms.ads: Add imported variable Invalid_TZ_Offset used to designate targets unable to support time zones. (Unimplemented): Temporary function raised by the body of new subprograms below. (Leap_Sec_Ops): New package in the private part of Ada.Calendar. This unit provides handling of leap seconds and is used by the new Ada 2005 packages Ada.Calendar.Arithmetic and Ada.Calendar.Formatting. (Split_W_Offset): Identical spec to that of Ada.Calendar.Split. This version returns an extra value which is the offset to UTC. * a-calend.adb (Split_W_Offset): Add call to localtime_tzoff. (Leap_Sec_Ops): New body for package in private part of Ada.Calendar. (Split_W_Offset): New function body. (Time_Of): When a date is close to UNIX epoch, compute the time for that date plus one day (that amount is later substracted after executing mktime) so there are no problems with time zone adjustments. * a-calend-mingw.adb: Remove Windows specific version no longer needed. * a-calari.ads, a-calari.adb, a-calfor.ads, a-calfor.adb, a-catizo.ads, a-catizo.adb: New files. * impunit.adb: Add new Ada 2005 entries * sysdep.c: Add external variable __gnat_invalid_tz_offset. Rename all occurences of "__gnat_localtime_r" to "__gnat_localtime_tzoff". (__gnat_localtime_tzoff for Windows): Add logic to retrieve the time zone data and calculate the GMT offset. (__gnat_localtime_tzoff for Darwin, Free BSD, Linux, Lynx and Tru64): Use the field "tm_gmtoff" to extract the GMT offset. (__gnat_localtime_tzoff for AIX, HPUX, SGI Irix and Sun Solaris): Use the external variable "timezone" to calculate the GMT offset. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@118234 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/ada/a-calend.ads')
-rw-r--r--gcc/ada/a-calend.ads64
1 files changed, 63 insertions, 1 deletions
diff --git a/gcc/ada/a-calend.ads b/gcc/ada/a-calend.ads
index a394e2bbcaf..9f4e66a1d43 100644
--- a/gcc/ada/a-calend.ads
+++ b/gcc/ada/a-calend.ads
@@ -6,7 +6,7 @@
-- --
-- S p e c --
-- --
--- Copyright (C) 1992-2005, Free Software Foundation, Inc. --
+-- Copyright (C) 1992-2006, Free Software Foundation, Inc. --
-- --
-- This specification is derived from the Ada Reference Manual for use with --
-- GNAT. The copyright notice above, and the license provisions that follow --
@@ -127,4 +127,66 @@ private
type Time is new Duration;
+ -- The following package provides handling of leap seconds. It is
+ -- used by Ada.Calendar.Arithmetic and Ada.Calendar.Formatting, both
+ -- Ada 2005 children of Ada.Calendar.
+
+ package Leap_Sec_Ops is
+
+ After_Last_Leap : constant Time := Time'Last;
+ -- Bigger by far than any leap second value. Not within range of
+ -- Ada.Calendar specified dates.
+
+ procedure Cumulative_Leap_Secs
+ (Start_Date : Time;
+ End_Date : Time;
+ Leaps_Between : out Duration;
+ Next_Leap_Sec : out Time);
+ -- Leaps_Between is the sum of the leap seconds that have occured
+ -- on or after Start_Date and before (strictly before) End_Date.
+ -- Next_Leap_Sec represents the next leap second occurence on or
+ -- after End_Date. If there are no leaps seconds after End_Date,
+ -- After_Last_Leap is returned. This does not provide info about
+ -- the next leap second (pos/neg or ?). After_Last_Leap can be used
+ -- as End_Date to count all the leap seconds that have occured on
+ -- or after Start_Date.
+ --
+ -- Important Notes: any fractional parts of Start_Date and End_Date
+ -- are discarded before the calculations are done. For instance: if
+ -- 113 seconds is a leap second (it isn't) and 113.5 is input as an
+ -- End_Date, the leap second at 113 will not be counted in
+ -- Leaps_Between, but it will be returned as Next_Leap_Sec. Thus, if
+ -- the caller wants to know if the End_Date is a leap second, the
+ -- comparison should be:
+ --
+ -- End_Date >= Next_Leap_Sec;
+ --
+ -- After_Last_Leap is designed so that this comparison works without
+ -- having to first check if Next_Leap_Sec is a valid leap second.
+
+ function All_Leap_Seconds return Duration;
+ -- Returns the sum off all of the leap seoncds.
+
+ end Leap_Sec_Ops;
+
+ procedure Split_With_Offset
+ (Date : Time;
+ Year : out Year_Number;
+ Month : out Month_Number;
+ Day : out Day_Number;
+ Seconds : out Day_Duration;
+ Offset : out Long_Integer);
+ -- Split_W_Offset has the same spec as Split with the addition of an
+ -- offset value which give the offset of the local time zone from UTC
+ -- at the input Date. This value comes for free during the implementation
+ -- of Split and is needed by UTC_Time_Offset. The returned Offset time
+ -- is straight from the C tm struct and is in seconds. If the system
+ -- dependent code has no way to find the offset it will return the value
+ -- Invalid_TZ_Offset declared below. Otherwise no checking is done, so
+ -- it is up to the user to check both for Invalid_TZ_Offset and otherwise
+ -- for a value that is acceptable.
+
+ Invalid_TZ_Offset : Long_Integer;
+ pragma Import (C, Invalid_TZ_Offset, "__gnat_invalid_tzoff");
+
end Ada.Calendar;