home *** CD-ROM | disk | FTP | other *** search
/ OpenStep 4.2J (Developer) / os42jdev.iso / NextDeveloper / Headers / mach / time_value.h < prev    next >
C/C++ Source or Header  |  1997-04-27  |  3KB  |  123 lines

  1. /* 
  2.  * Mach Operating System
  3.  * Copyright (c) 1991,1990,1989,1988,1987 Carnegie Mellon University
  4.  * All Rights Reserved.
  5.  * 
  6.  * Permission to use, copy, modify and distribute this software and its
  7.  * documentation is hereby granted, provided that both the copyright
  8.  * notice and this permission notice appear in all copies of the
  9.  * software, derivative works or modified versions, and any portions
  10.  * thereof, and that both notices appear in supporting documentation.
  11.  * 
  12.  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
  13.  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
  14.  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  15.  * 
  16.  * Carnegie Mellon requests users of this software to return to
  17.  * 
  18.  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
  19.  *  School of Computer Science
  20.  *  Carnegie Mellon University
  21.  *  Pittsburgh PA 15213-3890
  22.  * 
  23.  * any improvements or extensions that they make and grant Carnegie Mellon
  24.  * the rights to redistribute these changes.
  25.  */
  26. /*
  27.  * HISTORY
  28.  * $Log:    time_value.h,v $
  29.  * Revision 2.6  93/01/24  14:13:24  danner
  30.  *     Added include of mach/machine/vm_types.h to get definition
  31.  *     of integer_t.
  32.  *     [93/01/17            mrt]
  33.  * 
  34.  * Revision 2.5  93/01/14  17:48:20  danner
  35.  *     Standardized include symbol name.
  36.  *     [92/06/10            pds]
  37.  *     64bit cleanup.
  38.  *     [92/12/01            af]
  39.  * 
  40.  * Revision 2.4  91/05/18  14:35:13  rpd
  41.  *     Added mapped_time_value_t.
  42.  *     [91/03/21            rpd]
  43.  * 
  44.  * Revision 2.3  91/05/14  17:01:40  mrt
  45.  *     Correcting copyright
  46.  * 
  47.  * Revision 2.2  91/02/05  17:36:49  mrt
  48.  *     Changed to new Mach copyright
  49.  *     [91/02/01  17:22:07  mrt]
  50.  * 
  51.  * Revision 2.1  89/08/03  16:06:24  rwd
  52.  * Created.
  53.  * 
  54.  * Revision 2.4  89/02/25  18:41:34  gm0w
  55.  *     Changes for cleanup.
  56.  * 
  57.  * Revision 2.3  89/02/07  00:53:58  mwyoung
  58.  * Relocated from sys/time_value.h
  59.  * 
  60.  * Revision 2.2  89/01/31  01:21:58  rpd
  61.  *     TIME_MICROS_MAX should be 1 Million, not 10 Million.
  62.  *     [88/10/12            dlb]
  63.  * 
  64.  *  4-Jan-88  David Golub (dbg) at Carnegie-Mellon University
  65.  *    Created.
  66.  *
  67.  */
  68.  
  69. #ifndef    _MACH_TIME_VALUE_H_
  70. #define    _MACH_TIME_VALUE_H_
  71.  
  72. #include <mach/machine/vm_types.h>
  73.  
  74. /*
  75.  *    Time value returned by kernel.
  76.  */
  77.  
  78. struct time_value {
  79.     integer_t    seconds;
  80.     integer_t    microseconds;
  81. };
  82. typedef    struct time_value    time_value_t;
  83.  
  84. /*
  85.  *    Macros to manipulate time values.  Assume that time values
  86.  *    are normalized (microseconds <= 999999).
  87.  */
  88. #define    TIME_MICROS_MAX    (1000000)
  89.  
  90. #define    time_value_add_usec(val, micros)    {    \
  91.     if (((val)->microseconds += (micros))        \
  92.         >= TIME_MICROS_MAX) {            \
  93.         (val)->microseconds -= TIME_MICROS_MAX;    \
  94.         (val)->seconds++;                \
  95.     }                        \
  96. }
  97.  
  98. #define    time_value_add(result, addend)        {        \
  99.     (result)->microseconds += (addend)->microseconds;    \
  100.     (result)->seconds += (addend)->seconds;            \
  101.     if ((result)->microseconds >= TIME_MICROS_MAX) {    \
  102.         (result)->microseconds -= TIME_MICROS_MAX;        \
  103.         (result)->seconds++;                \
  104.     }                            \
  105. }
  106.  
  107. /*
  108.  *    Time value available through the mapped-time interface.
  109.  *    Read this mapped value with
  110.  *        do {
  111.  *            secs = mtime->seconds;
  112.  *            usecs = mtime->microseconds;
  113.  *        } while (secs != mtime->check_seconds);
  114.  */
  115.  
  116. typedef struct mapped_time_value {
  117.     integer_t seconds;
  118.     integer_t microseconds;
  119.     integer_t check_seconds;
  120. } mapped_time_value_t;
  121.  
  122. #endif    /* _MACH_TIME_VALUE_H_ */
  123.