6 #ifndef ACE_TIME_EXTENDED_BROKERS_H
7 #define ACE_TIME_EXTENDED_BROKERS_H
39 #include "../common/compat.h"
43 class __FlashStringHelper;
57 return ((int8_t)((uint8_t)deltaCode & 0x0f) - 4) * 15;
66 return (offsetCode * 15) + (((uint8_t)deltaCode & 0xf0) >> 4);
75 mZoneRule(zoneRule) {}
83 bool isNull()
const {
return mZoneRule ==
nullptr; }
85 #if ACE_TIME_USE_PROGMEM
87 int16_t fromYear()
const {
88 return pgm_read_word(&mZoneRule->fromYear);
91 int16_t toYear()
const {
92 return pgm_read_word(&mZoneRule->toYear);
95 uint8_t inMonth()
const {
96 return pgm_read_byte(&mZoneRule->inMonth);
99 uint8_t onDayOfWeek()
const {
100 return pgm_read_byte(&mZoneRule->onDayOfWeek);
103 int8_t onDayOfMonth()
const {
104 return pgm_read_byte(&mZoneRule->onDayOfMonth);
107 uint16_t atTimeMinutes()
const {
108 return internal::timeCodeToMinutes(
109 pgm_read_byte(&mZoneRule->atTimeCode),
110 pgm_read_byte(&mZoneRule->atTimeModifier));
113 uint8_t atTimeSuffix()
const {
114 return internal::toSuffix(pgm_read_byte(&mZoneRule->atTimeModifier));
117 int16_t deltaMinutes()
const {
121 uint8_t letter()
const {
122 return pgm_read_byte(&mZoneRule->letter);
127 int16_t fromYear()
const {
return mZoneRule->fromYear; }
129 int16_t toYear()
const {
return mZoneRule->toYear; }
131 uint8_t inMonth()
const {
return mZoneRule->inMonth; }
133 int8_t onDayOfWeek()
const {
return mZoneRule->onDayOfWeek; }
135 int8_t onDayOfMonth()
const {
return mZoneRule->onDayOfMonth; }
137 uint16_t atTimeMinutes()
const {
138 return internal::timeCodeToMinutes(
139 mZoneRule->atTimeCode, mZoneRule->atTimeModifier);
142 uint8_t atTimeSuffix()
const {
143 return internal::toSuffix(mZoneRule->atTimeModifier);
146 int16_t deltaMinutes()
const {
150 uint8_t letter()
const {
return mZoneRule->letter; }
155 const ZoneRule* mZoneRule;
162 mZonePolicy(zonePolicy) {}
170 bool isNull()
const {
return mZonePolicy ==
nullptr; }
172 #if ACE_TIME_USE_PROGMEM
174 uint8_t numRules()
const {
175 return pgm_read_byte(&mZonePolicy->numRules);
179 const ZoneRule* rules =
180 (
const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
184 uint8_t numLetters()
const {
185 return pgm_read_byte(&mZonePolicy->numLetters);
188 const char* letter(uint8_t i)
const {
189 const char*
const* letters = (
const char*
const*)
190 pgm_read_ptr(&mZonePolicy->letters);
191 return (
const char*) pgm_read_ptr(&letters[i]);
196 uint8_t numRules()
const {
return mZonePolicy->numRules; }
202 uint8_t numLetters()
const {
return mZonePolicy->numLetters; }
204 const char* letter(uint8_t i)
const {
205 return mZonePolicy->letters[i];
211 const ZonePolicy* mZonePolicy;
228 bool isNull()
const {
return mZoneEra ==
nullptr; }
233 return mZoneEra == other.mZoneEra;
236 #if ACE_TIME_USE_PROGMEM
240 (
const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
243 int16_t offsetMinutes()
const {
245 pgm_read_byte(&mZoneEra->offsetCode),
246 pgm_read_byte(&mZoneEra->deltaCode));
249 int16_t deltaMinutes()
const {
253 const char* format()
const {
254 return (
const char*) pgm_read_ptr(&mZoneEra->format);
257 int16_t untilYear()
const {
258 return pgm_read_word(&mZoneEra->untilYear);
261 uint8_t untilMonth()
const {
262 return pgm_read_byte(&mZoneEra->untilMonth);
265 uint8_t untilDay()
const {
266 return pgm_read_byte(&mZoneEra->untilDay);
269 uint16_t untilTimeMinutes()
const {
270 return internal::timeCodeToMinutes(
271 pgm_read_byte(&mZoneEra->untilTimeCode),
272 pgm_read_byte(&mZoneEra->untilTimeModifier));
275 uint8_t untilTimeSuffix()
const {
276 return internal::toSuffix(pgm_read_byte(&mZoneEra->untilTimeModifier));
285 int16_t offsetMinutes()
const {
289 int16_t deltaMinutes()
const {
293 const char* format()
const {
return mZoneEra->format; }
295 int16_t untilYear()
const {
return mZoneEra->untilYear; }
297 uint8_t untilMonth()
const {
return mZoneEra->untilMonth; }
299 uint8_t untilDay()
const {
return mZoneEra->untilDay; }
301 uint16_t untilTimeMinutes()
const {
302 return internal::timeCodeToMinutes(
303 mZoneEra->untilTimeCode, mZoneEra->untilTimeModifier);
306 uint8_t untilTimeSuffix()
const {
307 return internal::toSuffix(mZoneEra->untilTimeModifier);
313 const ZoneEra* mZoneEra;
320 mZoneInfo(zoneInfo) {}
333 return mZoneInfo == (
const ZoneInfo*) zoneKey;
337 return mZoneInfo == zoneInfoBroker.mZoneInfo;
340 bool isNull()
const {
return mZoneInfo ==
nullptr; }
342 #if ACE_TIME_USE_PROGMEM
344 const internal::ZoneContext* zoneContext()
const {
345 return (
const internal::ZoneContext*)
346 pgm_read_ptr(&mZoneInfo->zoneContext);
349 const __FlashStringHelper* name()
const {
350 return FPSTR(pgm_read_ptr(&mZoneInfo->name));
353 uint32_t zoneId()
const {
354 return pgm_read_dword(&mZoneInfo->zoneId);
357 uint8_t numEras()
const {
return pgm_read_byte(&mZoneInfo->numEras); }
359 const ZoneEraBroker era(uint8_t i)
const {
360 auto eras = (
const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
361 return ZoneEraBroker(&eras[i]);
364 bool isLink()
const {
365 return mZoneInfo->targetInfo !=
nullptr;
368 ZoneInfoBroker targetInfo()
const {
369 return ZoneInfoBroker((
const ZoneInfo*)
370 pgm_read_ptr(&mZoneInfo->targetInfo));
375 const internal::ZoneContext* zoneContext()
const {
376 return mZoneInfo->zoneContext;
379 const char* name()
const {
return mZoneInfo->name; }
381 uint32_t zoneId()
const {
return mZoneInfo->zoneId; }
383 uint8_t numEras()
const {
return mZoneInfo->numEras; }
385 const ZoneEraBroker era(uint8_t i)
const {
386 return ZoneEraBroker(&mZoneInfo->eras[i]);
389 const ZoneInfoBroker targetInfo()
const {
390 return ZoneInfoBroker(mZoneInfo->targetInfo);
405 const ZoneInfo* mZoneInfo;
415 mZoneRegistry(zoneRegistry) {}
423 #if ACE_TIME_USE_PROGMEM
425 const ZoneInfo* zoneInfo(uint16_t i)
const {
426 return (
const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
431 const ZoneInfo* zoneInfo(uint16_t i)
const {
432 return mZoneRegistry[i];
438 const ZoneInfo*
const* mZoneRegistry;
Helper functions are used in both Basic brokers and Extended brokers.
int16_t toOffsetMinutes(int8_t offsetCode, int8_t deltaCode)
Convert the offsetCode and deltaCode into a signed 8-bit integer.
int16_t toDeltaMinutes(int8_t deltaCode)
Convert the deltaCode in the ZoneInfo struct to the actual deltaMinutes.
A factory that creates a basic::ZoneInfoBroker.
ZoneInfoBroker createZoneInfoBroker(uintptr_t zoneKey) const
Data broker for accessing ZoneEra.
Data broker for accessing ZoneInfo.
void printNameTo(Print &printer) const
Print a human-readable identifier (e.g.
bool equals(uintptr_t zoneKey) const
void printShortNameTo(Print &printer) const
Print a short human-readable identifier (e.g.
Data broker for accessing ZonePolicy.
Data broker for accessing the ZoneRegistry.
Data broker for accessing ZoneRule.