AceTime  3.0.0
Date and time classes for Arduino that support timezones from the TZ Database.
TimeZoneData.h
1 /*
2  * MIT License
3  * Copyright (c) 2019 Brian T. Park
4  */
5 
6 #ifndef ACE_TIME_TIME_ZONE_DATA_H
7 #define ACE_TIME_TIME_ZONE_DATA_H
8 
9 #include <stdint.h>
10 #include "ZoneProcessor.h"
11 
12 namespace ace_time {
13 
38 struct TimeZoneData {
39  static const uint8_t kTypeError = 0;
40  static const uint8_t kTypeManual = 1;
41  static const uint8_t kTypeZoneId = 2;
42 
47  TimeZoneData(uint32_t zid)
48  : type(kTypeZoneId),
49  zoneId(zid)
50  {}
51 
53  TimeZoneData(int16_t stdMinutes, int16_t dstMinutes)
54  : type(kTypeManual),
55  stdOffsetMinutes(stdMinutes),
56  dstOffsetMinutes(dstMinutes)
57  {}
58 
61  : type(kTypeError),
62  zoneId(0)
63  {}
64 
65  uint8_t type;
66 
67  union {
76  struct {
77  int16_t stdOffsetMinutes;
78  int16_t dstOffsetMinutes;
79  };
80 
85  uint32_t zoneId;
86  };
87 };
88 
89 inline bool operator==(const TimeZoneData& a, const TimeZoneData& b) {
90  if (a.type != b.type) return false;
91  switch (a.type) {
92  case TimeZoneData::kTypeManual:
93  return (a.stdOffsetMinutes == b.stdOffsetMinutes)
94  && (a.dstOffsetMinutes == b.dstOffsetMinutes);
95  case TimeZoneData::kTypeZoneId:
96  return (a.zoneId == b.zoneId);
97  case TimeZoneData::kTypeError:
98  return true;
99  default:
100  return false;
101  }
102 }
103 
104 inline bool operator!=(const TimeZoneData& a, const TimeZoneData& b) {
105  return ! (a == b);
106 }
107 
108 }
109 
110 #endif
Data structure that captures the internal state of a TimeZone object with enough information so that ...
Definition: TimeZoneData.h:38
uint32_t zoneId
Both TimeZone::kTypeBasic and TimeZone::kTypeExtended are mapped to a TimeZoneData::kTypeZoneId.
Definition: TimeZoneData.h:85
TimeZoneData()
Default constructor gives kTypeError sentinel.
Definition: TimeZoneData.h:60
TimeZoneData(uint32_t zid)
Constructor for kTypeZoneId needed because C+11 does not have member initialization,...
Definition: TimeZoneData.h:47
TimeZoneData(int16_t stdMinutes, int16_t dstMinutes)
Constructor for kTypeManual.
Definition: TimeZoneData.h:53