AtxTime.h

Go to the documentation of this file.
00001 /*****************************************************************
00002 |
00003 |   Atomix - Time
00004 |
00005 |   (c) 2002-2006 Gilles Boccon-Gibod
00006 |   Author: Gilles Boccon-Gibod (bok@bok.net)
00007 |
00008  ****************************************************************/
00013 #ifndef _ATX_TIME_H_
00014 #define _ATX_TIME_H_
00015 
00016 /*----------------------------------------------------------------------
00017 |   includes
00018 +---------------------------------------------------------------------*/
00019 #include "AtxConfig.h"
00020 #include "AtxTypes.h"
00021 
00022 /*----------------------------------------------------------------------
00023 |   types
00024 +---------------------------------------------------------------------*/
00025 typedef struct {
00026     ATX_Int32 seconds;
00027     ATX_Int32 nanoseconds;
00028 } ATX_TimeStamp;
00029 
00030 typedef ATX_TimeStamp ATX_Time;
00031 typedef ATX_TimeStamp ATX_TimeInterval;
00032 
00033 /*----------------------------------------------------------------------
00034 |   macros
00035 +---------------------------------------------------------------------*/
00036 #define ATX_TimeStamp_Set(t, s, n) \
00037     do {(t).seconds = (s); (t).nanoseconds = (n);} while(0)
00038 
00039 #define ATX_TimeStamp_IsLater(t0,t1)           \
00040 (                                              \
00041     ((t0).seconds > (t1).seconds) ||    \
00042     (                                          \
00043         (t0).seconds == (t1).seconds &&        \
00044         (t0).nanoseconds > (t1).nanoseconds    \
00045     )                                          \
00046 )
00047 
00048 #define ATX_TimeStamp_IsLaterOrEqual(t0,t1)   \
00049 (                                             \
00050     ((t0).seconds > (t1).seconds) ||   \
00051     (                                         \
00052         (t0).seconds == (t1).seconds &&       \
00053         (t0).nanoseconds >= (t1).nanoseconds  \
00054     )                                         \
00055 )
00056 
00057 #define ATX_TimeStamp_Add(t0,t1,t2) do {                        \
00058     (t0).seconds = (t1).seconds + (t2).seconds;                 \
00059     (t0).nanoseconds = (t1).nanoseconds + (t2).nanoseconds;     \
00060     if ((t0).nanoseconds > 1000000000) {                        \
00061         (t0).seconds++;                                         \
00062         (t0).nanoseconds -= 1000000000;                         \
00063     }                                                           \
00064 } while (0)
00065 
00066 #define ATX_TimeStamp_Sub(t0,t1,t2) do {                        \
00067     (t0).seconds = (t1).seconds - (t2).seconds;                 \
00068     (t0).nanoseconds = (t1).nanoseconds - (t2).nanoseconds;     \
00069     if ((t0).nanoseconds < 0) {                                 \
00070         (t0).seconds--;                                         \
00071         (t0).nanoseconds += 1000000000;                         \
00072     }                                                           \
00073 } while (0)
00074 
00075 #define ATX_TimeStamp_ToInt64(t, i) do {                        \
00076     ATX_Int64_Set_Int32(i, t.seconds);                          \
00077     ATX_Int64_Mul_Int32(i, 1000000000);                         \
00078     ATX_Int64_Add_Int32(i, t.nanoseconds);                      \
00079 } while (0)
00080 
00081 #endif /* _ATX_TIME_H_ */