Developer's Guide
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
p6time.h
Go to the documentation of this file.
1 
9 #ifndef P6TIME_H__
10 #define P6TIME_H__ 1
11 
12 #include "p6err.h" // Error and type definitions
13 #include "p6comdef.h" // [p6]COM definitions
14 #include "p6errorinfo.h" // Definition only, not supported by p6Loader
15 #include "p6runtimeapi.h" // Platform runtime API definitions
16 #include "p6comhlpr.h" // [p6]COM helper macros
17 
18 
19 #ifdef __cplusplus
20 namespace P6R {
21 extern "C" {
22 #endif
23 
28  #define P6RFC822DATESZ 35
29  #define P6ISO8601DATESZ 26
30 
31  #define P6INRVLINFINITE ((P6INTERVAL)-1)
32  #define P6INRVLNOTIMEOUT ((P6INTERVAL)0)
33 
40  #undef INTERFACE
41  #define INTERFACE p6ITime
43  {
55  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
56 
70  P6DECLCOMMETHOD(now)(P6THIS_ P6TIME *pTime) P6PURE;
71 
85  P6DECLCOMMETHOD(getTimezoneOffset)(P6THIS_ P6INT32 *pTzOffset) P6PURE;
86 
106  P6DECLCOMMETHOD(expand)(P6THIS_ const P6TIME *pTime,P6TIMEINFO *pExpandedTime,P6BOOL bLocalTime) P6PURE;
107 
123  P6DECLCOMMETHOD(collapse)(P6THIS_ P6TIMEINFO *pExpandedTime,P6TIME *pTime) P6PURE;
124 
144  P6DECLCOMMETHOD(adjust)(P6THIS_ P6TIMEINFO *pExpandedTime,P6INT32 tzOffset) P6PURE;
145 
146 
160  P6DECLCOMMETHOD(addMillseconds)(P6THIS_ P6TIME *pTime,P6INT32 nMilliseconds) P6PURE;
161 
175  P6DECLCOMMETHOD(addSeconds)(P6THIS_ P6TIME *pTime,P6INT32 nSeconds) P6PURE;
176 
190  P6DECLCOMMETHOD(addMinutes)(P6THIS_ P6TIME *pTime,P6INT32 nMinutes) P6PURE;
191 
205  P6DECLCOMMETHOD(addHours)(P6THIS_ P6TIME *pTime,P6INT32 nHours) P6PURE;
206 
207 
217  P6DECLCOMMETHOD(addP6Interval)(P6THIS_ P6TIME *pTime,const P6INTERVAL *pInterval) P6PURE;
218 
219 
231  P6DECLCOMMETHOD(diffP6Time)(P6THIS_ const P6TIME *pTime1,const P6TIME *pTime2,P6INTERVAL *pIntervalDifference) P6PURE;
232 
246  P6DECLCOMMETHOD(unixTimeToP6Time)(P6THIS_ P6INT32 unixTime,P6TIME *pTimeOut) P6PURE;
247 
261  P6DECLCOMMETHOD(p6TimeToUnixTime)(P6THIS_ const P6TIME *pTime,P6INT32 *pUnixTime) P6PURE;
262 
286  P6DECLCOMMETHOD(createRfc822DateW)(P6THIS_ const P6TIME *pTime,P6WCHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
287 
312  P6DECLCOMMETHOD(createRfc822DateA)(P6THIS_ const P6TIME *pTime,P6CHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
313 
340  P6DECLCOMMETHOD(parseRfc822DateW)(P6THIS_ const P6WCHAR *pwszDate,P6TIME *pOutTime,P6INT32* pDeltaFromGMT) P6PURE;
341 
370  P6DECLCOMMETHOD(parseRfc822DateA)(P6THIS_ const P6CHAR *pszDate,P6TIME *pOutTime,P6INT32* pDeltaFromGMT) P6PURE;
371 
398  P6DECLCOMMETHOD(createISO8601DateW)(P6THIS_ const P6TIME *pTime,P6INT32 deltaFromGMT,P6UINT8 degree,P6WCHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
399 
426  P6DECLCOMMETHOD(createISO8601DateA)(P6THIS_ const P6TIME *pTime,P6INT32 deltaFromGMT,P6UINT8 degree,P6CHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
427 
454  P6DECLCOMMETHOD(parseISO8601DateW)(P6THIS_ const P6WCHAR *pwszDate,P6TIME *pOutTime,P6INT32* pDeltaFromGMT) P6PURE;
455 
483  P6DECLCOMMETHOD(parseISO8601DateA)(P6THIS_ const P6CHAR *pszDate,P6TIME *pOutTime,P6INT32* pDeltaFromGMT) P6PURE;
484 
485 
498  P6DECLCOMMETHOD(getLocalTimezoneOffset)(P6THIS_ P6INT32 *pOffset) P6PURE;
499  };
500 
501  // {C44DC7E7-23BD-45dc-881C-5ACB28897E87}
502  #define IF_p6ITime {0xC44DC7E7,0x23BD,0x45dc,{0x88,0x1C,0x5A,0xCB,0x28,0x89,0x7E,0x87}}
503 
504 
512  static const P6TIMEFLAGS P6TIMEFLAGS_NOFLAGS = 0x00000000;
513 
520  #undef INTERFACE
521  #define INTERFACE p6ITime2
523  {
535  P6DECLCOMMETHOD(initialize2)(P6THIS_ P6TIMEFLAGS flags) P6PURE;
536 
550  P6DECLCOMMETHOD(now)(P6THIS_ P6TIME *pTime) P6PURE;
551 
565  P6DECLCOMMETHOD(getTimezoneOffset)(P6THIS_ P6INT32 *pTzOffset) P6PURE;
566 
586  P6DECLCOMMETHOD(expand)(P6THIS_ const P6TIME *pTime,P6TIMEINFO *pExpandedTime,P6BOOL bLocalTime) P6PURE;
587 
603  P6DECLCOMMETHOD(collapse)(P6THIS_ P6TIMEINFO *pExpandedTime,P6TIME *pTime) P6PURE;
604 
624  P6DECLCOMMETHOD(adjust)(P6THIS_ P6TIMEINFO *pExpandedTime,P6INT32 tzOffset) P6PURE;
625 
639  P6DECLCOMMETHOD(addMillseconds)(P6THIS_ P6TIME *pTime,P6INT32 nMilliseconds) P6PURE;
640 
654  P6DECLCOMMETHOD(addSeconds)(P6THIS_ P6TIME *pTime,P6INT32 nSeconds) P6PURE;
655 
669  P6DECLCOMMETHOD(addMinutes)(P6THIS_ P6TIME *pTime,P6INT32 nMinutes) P6PURE;
670 
684  P6DECLCOMMETHOD(addHours)(P6THIS_ P6TIME *pTime,P6INT32 nHours) P6PURE;
685 
695  P6DECLCOMMETHOD(addP6Interval)(P6THIS_ P6TIME *pTime,const P6INTERVAL *pInterval) P6PURE;
696 
708  P6DECLCOMMETHOD(diffP6Time)(P6THIS_ const P6TIME *pTime1,const P6TIME *pTime2,P6INTERVAL *pIntervalDifference) P6PURE;
709 
723  P6DECLCOMMETHOD(unixTimeToP6Time)(P6THIS_ P6INT32 unixTime,P6TIME *pTimeOut) P6PURE;
724 
738  P6DECLCOMMETHOD(p6TimeToUnixTime)(P6THIS_ const P6TIME *pTime,P6INT32 *pUnixTime) P6PURE;
739 
763  P6DECLCOMMETHOD(createRfc822DateW)(P6THIS_ const P6TIME *pTime,P6WCHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
764 
789  P6DECLCOMMETHOD(createRfc822DateA)(P6THIS_ const P6TIME *pTime,P6CHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
790 
817  P6DECLCOMMETHOD(parseRfc822DateW)(P6THIS_ const P6WCHAR *pwszDate,P6TIME *pOutTime,P6INT32* pDeltaFromGMT) P6PURE;
818 
847  P6DECLCOMMETHOD(parseRfc822DateA)(P6THIS_ const P6CHAR *pszDate,P6TIME *pOutTime,P6INT32* pDeltaFromGMT) P6PURE;
848 
875  P6DECLCOMMETHOD(createISO8601DateW)(P6THIS_ const P6TIME *pTime,P6INT32 deltaFromGMT,P6UINT8 degree,P6WCHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
876 
903  P6DECLCOMMETHOD(createISO8601DateA)(P6THIS_ const P6TIME *pTime,P6INT32 deltaFromGMT,P6UINT8 degree,P6CHAR *pBuffer,P6SIZE cBuffer,P6SIZE *pcWritten) P6PURE;
904 
932  P6DECLCOMMETHOD(parseISO8601Date2W)(P6THIS_ const P6WCHAR *pwszDate, P6BOOL bUseGMTDefault, P6TIME *pOutTime, P6INT32* pDeltaFromGMT ) P6PURE;
933 
962  P6DECLCOMMETHOD(parseISO8601Date2A)(P6THIS_ const P6CHAR *pszDate, P6BOOL bUseGMTDefault, P6TIME *pOutTime, P6INT32* pDeltaFromGMT ) P6PURE;
963 
976  P6DECLCOMMETHOD(getLocalTimezoneOffset)(P6THIS_ P6INT32 *pOffset) P6PURE;
977 
999  P6DECLCOMMETHOD(parseISO8601DurationW)(P6THIS_ const P6WCHAR* pDuration, P6UINT32 durLength, P6UINT64* pReturnSeconds ) P6PURE;
1000 
1022  P6DECLCOMMETHOD(parseISO8601DurationA)(P6THIS_ const P6CHAR* pDuration, P6UINT32 durLength, P6UINT64* pReturnSeconds ) P6PURE;
1023  };
1024 
1025  // {5C92C680-C90E-424E-8D10-98CD1D886696}
1026  #define IF_p6ITime2 {0x5c92c680,0xc90e,0x424e,{0x8d,0x10,0x98,0xcd,0x1d,0x88,0x66,0x96}}
1027 
1028  // {9A30C203-A82C-46b3-9307-8CB1F59AC0BB}
1029  #define COMP_p6Time {0x9A30C203,0xA82C,0x46b3,{0x93,0x07,0x8C,0xB1,0xF5,0x9A,0xC0,0xBB}}
1030 
1031 
1045  #undef INTERFACE
1046  #define INTERFACE p6IIntervalTime
1048  {
1060  P6DECLCOMMETHOD(initialize)(P6THIS) P6PURE;
1061 
1072  P6DECLCOMMETHOD(get)(P6THIS_ P6INTERVAL *pInterval) P6PURE;
1073 
1074  P6DECLCOMMETHOD(addMicroSeconds)(P6THIS_ P6INTERVAL *pInterval,P6INT64 uSeconds) P6PURE;
1075  P6DECLCOMMETHOD(addMilliSeconds)(P6THIS_ P6INTERVAL *pInterval,P6INT32 mSeconds) P6PURE;
1076  P6DECLCOMMETHOD(addSeconds)(P6THIS_ P6INTERVAL *pInterval,P6INT32 seconds) P6PURE;
1077  P6DECLCOMMETHOD(addMinutes)(P6THIS_ P6INTERVAL *pInterval,P6INT32 minutes) P6PURE;
1078  P6DECLCOMMETHOD(addHours)(P6THIS_ P6INTERVAL *pInterval,P6INT32 hours) P6PURE;
1079 
1092  P6DECLCOMMETHOD(secondsToInterval)(P6THIS_ P6UINT32 nSeconds,P6INTERVAL *pInterval) P6PURE;
1093 
1107  P6DECLCOMMETHOD(milliSecondsToInterval)(P6THIS_ P6UINT32 nMilliSeconds,P6INTERVAL *pInterval) P6PURE;
1108 
1122  P6DECLCOMMETHOD(microSecondsToInterval)(P6THIS_ P6UINT64 nMicroSeconds,P6INTERVAL *pInterval) P6PURE;
1123 
1136  P6DECLCOMMETHOD(intervalToSeconds)(P6THIS_ P6INTERVAL *pInterval,P6UINT32 *pnSeconds) P6PURE;
1137 
1150  P6DECLCOMMETHOD(intervalToMilliSeconds)(P6THIS_ P6INTERVAL *pInterval,P6UINT32 *pnMilliSeconds) P6PURE;
1151 
1164  P6DECLCOMMETHOD(intervalToMicroSeconds)(P6THIS_ P6INTERVAL *pInterval,P6UINT64 *pnMicroSeconds) P6PURE;
1165 
1166  P6DECLCOMMETHOD(getFractionalSeconds)(P6THIS_ const P6INTERVAL *pInterval,P6UINT64 *pnFractionalSeconds) P6PURE;
1167 
1182  P6DECLCOMMETHOD(expandInterval)(P6THIS_ const P6INTERVAL *pInterval,P6EXPANDEDINTERVAL *pExpanded) P6PURE;
1183 
1197  P6DECLCOMMETHOD(getFrequency)(P6THIS_ P6UINT64 *pFrequency) P6PURE;
1198  };
1199 
1200  // {4AB989F9-4310-4DDB-B614-EB7F8CF5958C}
1201  #define IF_p6IIntervalTime {0x4AB989F9,0x4310,0x4DDB,{0xB6,0x14,0xEB,0x7F,0x8C,0xF5,0x95,0x8C}}
1202 
1203  // {FAB4E452-CBD8-488E-B796-CA78AE9270E6}
1204  #define COMP_p6IntervalTime {0xFAB4E452,0xCBD8,0x488E,{0xB7,0x96,0xCA,0x78,0xAE,0x92,0x70,0xE6}}
1205 
1206  #define GLOBAL_TIMEZONES_INTERFACE "P6R::p6Time::GlobalTimezonesConfig"
1207 
1208  #define P6MSECPERSEC 1000
1209  #define P6USECPERSEC 1000000
1210  #define P6NANOSECPERSEC 1000000000
1211 
1212 #ifdef __cplusplus
1213 } /* extern "C" */
1214 } // namespace
1215 #endif
1216 
1217 
1218 #endif
1219 
size_t P6SIZE
Definition: p6types.h:90
uint64_t P6UINT64
Definition: p6types.h:79
uint32_t P6UINT32
Definition: p6types.h:77
#define P6DECLAREICOM
Definition: p6defs.h:191
#define P6PURE
Definition: p6defs.h:192
Standard error codes.
unsigned char P6BOOL
Boolean type.
Definition: p6types.h:133
Provides an interface to the system wallclock time.
Definition: p6time.h:42
unsigned char P6UINT8
Definition: p6types.h:71
P6COM runtime interfaces definitions.
wchar_t P6WCHAR
Wide character type see p6i18n.h.
Definition: p6types.h:111
P6UINT32 P6TIMEFLAGS
P6TIMEFLAGS.
Definition: p6time.h:511
A structure that is used to describe a specified time.
Definition: p6types.h:264
The base interface all [p6]COM components must derive from and implement.
Definition: p6comdef.h:97
int64_t P6INT64
Definition: p6types.h:78
P6COM base interface definitions.
p6IErrorInfo interface definition
Get and translate interval times.
Definition: p6time.h:1047
#define P6DECLCOMMETHOD(method)
Definition: p6defs.h:189
P6INT64 P6TIME
The wallclock time represented as the number of microseconds since midnight January 1 1970 UTC...
Definition: p6types.h:259
#define P6THIS_
Definition: p6defs.h:193
int32_t P6INT32
Definition: p6types.h:76
P6R Component runtime helper macros, templated, etc.
#define P6THIS
Definition: p6defs.h:194
char P6CHAR
Narrow character type.
Definition: p6types.h:105
#define P6DECLAREIF_(iface, baseif)
Definition: p6defs.h:188