OSDN Git Service

2006-10-31 Robert Dewar <dewar@adacore.com>
[pf3gnuchains/gcc-fork.git] / gcc / ada / a-calend-vms.ads
index 6704346..3f68ffb 100644 (file)
@@ -1,12 +1,12 @@
 ------------------------------------------------------------------------------
 --                                                                          --
---                         GNAT RUNTIME COMPONENTS                          --
+--                         GNAT RUN-TIME COMPONENTS                         --
 --                                                                          --
 --                         A D A . C A L E N D A R                          --
 --                                                                          --
 --                                 S p e c                                  --
 --                                                                          --
---          Copyright (C) 1992-2002 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 --
@@ -20,8 +20,8 @@
 -- or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License --
 -- for  more details.  You should have  received  a copy of the GNU General --
 -- Public License  distributed with GNAT;  see file COPYING.  If not, write --
--- to  the Free Software Foundation,  59 Temple Place - Suite 330,  Boston, --
--- MA 02111-1307, USA.                                                      --
+-- to  the  Free Software Foundation,  51  Franklin  Street,  Fifth  Floor, --
+-- Boston, MA 02110-1301, USA.                                              --
 --                                                                          --
 -- As a special exception,  if other files  instantiate  generics from this --
 -- unit, or you link  this unit with other files  to produce an executable, --
@@ -35,7 +35,7 @@
 --                                                                          --
 ------------------------------------------------------------------------------
 
---  This is the Alpha/VMS version.
+--  This is the Alpha/VMS version
 
 with System.OS_Primitives;
 package Ada.Calendar is
@@ -87,6 +87,8 @@ package Ada.Calendar is
 
    Time_Error : exception;
 
+   Unimplemented : exception;
+
 private
 
    pragma Inline (Clock);
@@ -118,4 +120,66 @@ private
    --  Relative Time is positive, whereas relative OS_Time is negative,
    --  but this declaration makes for easier conversion.
 
+   --  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;