1 
   2 
   3 
   4 
   5 
   6 
   7 
   8 
   9 
  10 #ifndef PCMK__CRM_COMMON_ISO8601__H
  11 #define PCMK__CRM_COMMON_ISO8601__H
  12 
  13 #include <time.h>
  14 #include <ctype.h>
  15 #include <stdint.h>   
  16 #include <stdbool.h>  
  17 
  18 #ifdef __cplusplus
  19 extern "C" {
  20 #endif
  21 
  22 
  23 
  24 
  25 
  26 
  27 
  28 
  29 
  30 
  31 
  32 typedef struct crm_time_s crm_time_t;
  33 
  34 typedef struct crm_time_period_s {
  35     crm_time_t *start;
  36     crm_time_t *end;
  37     crm_time_t *diff;
  38 } crm_time_period_t;
  39 
  40 
  41 
  42 
  43 
  44 
  45 
  46 
  47 
  48 
  49 
  50 
  51 
  52 
  53 crm_time_t *crm_time_new(const char *string);
  54 crm_time_t *crm_time_new_undefined(void);
  55 void crm_time_free(crm_time_t * dt);
  56 
  57 bool crm_time_is_defined(const crm_time_t *t);
  58 char *crm_time_as_string(const crm_time_t *dt, int flags);
  59 
  60 #define crm_time_log(level, prefix, dt, flags)  \
  61     crm_time_log_alias(level, __FILE__, __func__, __LINE__, prefix, dt, flags)
  62 
  63 void crm_time_log_alias(int log_level, const char *file, const char *function,
  64                         int line, const char *prefix,
  65                         const crm_time_t *date_time, int flags);
  66 
  67 #define crm_time_log_date          0x001
  68 #define crm_time_log_timeofday     0x002
  69 #define crm_time_log_with_timezone 0x004
  70 #define crm_time_log_duration      0x008
  71 
  72 #define crm_time_ordinal           0x010
  73 #define crm_time_weeks             0x020
  74 #define crm_time_seconds           0x100
  75 #define crm_time_epoch             0x200
  76 #define crm_time_usecs             0x400
  77 
  78 crm_time_t *crm_time_parse_duration(const char *duration_str);
  79 crm_time_t *crm_time_calculate_duration(const crm_time_t *dt,
  80                                         const crm_time_t *value);
  81 crm_time_period_t *crm_time_parse_period(const char *period_str);
  82 void crm_time_free_period(crm_time_period_t *period);
  83 
  84 int crm_time_compare(const crm_time_t *a, const crm_time_t *b);
  85 
  86 int crm_time_get_timeofday(const crm_time_t *dt, uint32_t *h, uint32_t *m,
  87                            uint32_t *s);
  88 int crm_time_get_timezone(const crm_time_t *dt, uint32_t *h, uint32_t *m);
  89 int crm_time_get_gregorian(const crm_time_t *dt, uint32_t *y, uint32_t *m,
  90                            uint32_t *d);
  91 int crm_time_get_ordinal(const crm_time_t *dt, uint32_t *y, uint32_t *d);
  92 int crm_time_get_isoweek(const crm_time_t *dt, uint32_t *y, uint32_t *w,
  93                          uint32_t * d);
  94 
  95 
  96 long long crm_time_get_seconds(const crm_time_t *dt);
  97 
  98 
  99 long long crm_time_get_seconds_since_epoch(const crm_time_t *dt);
 100 
 101 void crm_time_set(crm_time_t *target, const crm_time_t *source);
 102 void crm_time_set_timet(crm_time_t *target, const time_t *source);
 103 
 104 
 105 crm_time_t *pcmk_copy_time(const crm_time_t *source);
 106 crm_time_t *crm_time_add(const crm_time_t *dt, const crm_time_t *value);
 107 crm_time_t *crm_time_subtract(const crm_time_t *dt, const crm_time_t *value);
 108 
 109 
 110 void crm_time_add_seconds(crm_time_t * dt, int value);
 111 void crm_time_add_minutes(crm_time_t * dt, int value);
 112 void crm_time_add_hours(crm_time_t * dt, int value);
 113 void crm_time_add_days(crm_time_t * dt, int value);
 114 void crm_time_add_weeks(crm_time_t * dt, int value);
 115 void crm_time_add_months(crm_time_t * dt, int value);
 116 void crm_time_add_years(crm_time_t * dt, int value);
 117 
 118 
 119 int crm_time_january1_weekday(int year);
 120 int crm_time_weeks_in_year(int year);
 121 int crm_time_days_in_month(int month, int year);
 122 
 123 bool crm_time_leapyear(int year);
 124 bool crm_time_check(const crm_time_t *dt);
 125 
 126 #ifdef __cplusplus
 127 }
 128 #endif
 129 
 130 #endif