6 #ifndef ACE_TIME_BROKERS_H 7 #define ACE_TIME_BROKERS_H 40 #include "../common/compat.h" 49 return rawCode * (uint16_t) 15 + (rawModifier & 0x0f);
57 return rawModifier & 0xf0;
65 template <
typename ZR>
69 mZoneRule(zoneRule) {}
80 bool isNull()
const {
return mZoneRule ==
nullptr; }
82 bool isNotNull()
const {
return mZoneRule !=
nullptr; }
84 int8_t fromYearTiny()
const {
return mZoneRule->fromYearTiny; }
86 int8_t toYearTiny()
const {
return mZoneRule->toYearTiny; }
88 int8_t inMonth()
const {
return mZoneRule->inMonth; }
90 int8_t onDayOfWeek()
const {
return mZoneRule->onDayOfWeek; }
92 int8_t onDayOfMonth()
const {
return mZoneRule->onDayOfMonth; }
94 uint16_t atTimeMinutes()
const {
96 mZoneRule->atTimeCode, mZoneRule->atTimeModifier);
99 uint8_t atTimeModifier()
const {
103 int8_t deltaCode()
const {
return mZoneRule->deltaCode; }
105 uint8_t letter()
const {
return mZoneRule->letter; }
112 template <
typename ZP,
typename ZR>
116 mZonePolicy(zonePolicy) {}
124 bool isNull()
const {
return mZonePolicy ==
nullptr; }
126 bool isNotNull()
const {
return mZonePolicy !=
nullptr; }
128 uint8_t numRules()
const {
return mZonePolicy->numRules; }
134 uint8_t numLetters()
const {
return mZonePolicy->numLetters; }
136 const char* letter(uint8_t i)
const {
137 return mZonePolicy->letters[i];
141 const ZP*
const mZonePolicy;
145 template <
typename ZE,
typename ZP,
typename ZR>
160 const ZE* zoneEra()
const {
return mZoneEra; }
162 bool isNull()
const {
return mZoneEra ==
nullptr; }
164 bool isNotNull()
const {
return mZoneEra !=
nullptr; }
166 int8_t offsetCode()
const {
return mZoneEra->offsetCode; }
172 int8_t deltaCode()
const {
return mZoneEra->deltaCode; }
174 const char* format()
const {
return mZoneEra->format; }
176 int8_t untilYearTiny()
const {
return mZoneEra->untilYearTiny; }
178 uint8_t untilMonth()
const {
return mZoneEra->untilMonth; }
180 uint8_t untilDay()
const {
return mZoneEra->untilDay; }
182 uint16_t untilTimeMinutes()
const {
184 mZoneEra->untilTimeCode, mZoneEra->untilTimeModifier);
187 uint8_t untilTimeModifier()
const {
188 return toModifier(mZoneEra->untilTimeModifier);
197 template <
typename ZI,
typename ZE,
typename ZP,
typename ZR,
typename ZC>
201 mZoneInfo(zoneInfo) {}
209 const ZI* zoneInfo()
const {
return mZoneInfo; }
211 uint32_t zoneId()
const {
return mZoneInfo->zoneId; }
213 const char* name()
const {
return mZoneInfo->name; }
215 int16_t startYear()
const {
return mZoneInfo->zoneContext->startYear; }
217 int16_t untilYear()
const {
return mZoneInfo->zoneContext->untilYear; }
219 uint8_t numEras()
const {
return mZoneInfo->numEras; }
233 template <
typename ZI>
237 mZoneRegistry(zoneRegistry) {}
246 const ZI* zoneInfo(uint16_t i)
const {
247 return mZoneRegistry[i];
251 const ZI*
const*
const mZoneRegistry;
259 template <
typename ZR>
263 mZoneRule(zoneRule) {}
266 mZoneRule(
nullptr) {}
274 bool isNull()
const {
return mZoneRule ==
nullptr; }
276 bool isNotNull()
const {
return mZoneRule !=
nullptr; }
278 int8_t fromYearTiny()
const {
279 return pgm_read_byte(&mZoneRule->fromYearTiny);
282 int8_t toYearTiny()
const {
283 return pgm_read_byte(&mZoneRule->toYearTiny);
286 int8_t inMonth()
const {
287 return pgm_read_byte(&mZoneRule->inMonth);
290 int8_t onDayOfWeek()
const {
291 return pgm_read_byte(&mZoneRule->onDayOfWeek);
294 int8_t onDayOfMonth()
const {
295 return pgm_read_byte(&mZoneRule->onDayOfMonth);
298 uint16_t atTimeMinutes()
const {
300 pgm_read_byte(&mZoneRule->atTimeCode),
301 pgm_read_byte(&mZoneRule->atTimeModifier));
304 uint8_t atTimeModifier()
const {
305 return toModifier(pgm_read_byte(&mZoneRule->atTimeModifier));
308 int8_t deltaCode()
const {
309 return pgm_read_byte(&mZoneRule->deltaCode);
312 uint8_t letter()
const {
313 return pgm_read_byte(&mZoneRule->letter);
321 template <
typename ZP,
typename ZR>
325 mZonePolicy(zonePolicy) {}
333 bool isNull()
const {
return mZonePolicy ==
nullptr; }
335 bool isNotNull()
const {
return mZonePolicy !=
nullptr; }
337 uint8_t numRules()
const {
338 return pgm_read_byte(&mZonePolicy->numRules);
342 const ZR* rules = (
const ZR*) pgm_read_ptr(&mZonePolicy->rules);
346 uint8_t numLetters()
const {
347 return pgm_read_byte(&mZonePolicy->numLetters);
350 const char* letter(uint8_t i)
const {
351 const char*
const* letters = (
const char*
const*)
352 pgm_read_ptr(&mZonePolicy->letters);
353 return (
const char*) pgm_read_ptr(&letters[i]);
357 const ZP*
const mZonePolicy;
361 template <
typename ZE,
typename ZP,
typename ZR>
376 const ZE* zoneEra()
const {
return mZoneEra; }
378 bool isNull()
const {
return mZoneEra ==
nullptr; }
380 bool isNotNull()
const {
return mZoneEra !=
nullptr; }
382 int8_t offsetCode()
const {
383 return pgm_read_byte(&mZoneEra->offsetCode);
388 (
const ZP*) pgm_read_ptr(&mZoneEra->zonePolicy));
391 int8_t deltaCode()
const {
392 return pgm_read_byte(&mZoneEra->deltaCode);
395 const char* format()
const {
396 return (
const char*) pgm_read_ptr(&mZoneEra->format);
399 int8_t untilYearTiny()
const {
400 return pgm_read_byte(&mZoneEra->untilYearTiny);
403 uint8_t untilMonth()
const {
404 return pgm_read_byte(&mZoneEra->untilMonth);
407 uint8_t untilDay()
const {
408 return pgm_read_byte(&mZoneEra->untilDay);
411 uint16_t untilTimeMinutes()
const {
413 pgm_read_byte(&mZoneEra->untilTimeCode),
414 pgm_read_byte(&mZoneEra->untilTimeModifier));
417 uint8_t untilTimeModifier()
const {
418 return toModifier(pgm_read_byte(&mZoneEra->untilTimeModifier));
427 template <
typename ZI,
typename ZE,
typename ZP,
typename ZR,
typename ZC>
431 mZoneInfo(zoneInfo) {}
439 const ZI* zoneInfo()
const {
return mZoneInfo; }
441 const char* name()
const {
442 return (
const char*) pgm_read_ptr(&mZoneInfo->name);
445 uint32_t zoneId()
const {
446 return pgm_read_dword(&mZoneInfo->zoneId);
449 int16_t startYear()
const {
450 const ZC* zoneContext = (
const ZC*) pgm_read_ptr(&mZoneInfo->zoneContext);
451 return zoneContext->startYear;
454 int16_t untilYear()
const {
455 const ZC* zoneContext = (
const ZC*) pgm_read_ptr(&mZoneInfo->zoneContext);
456 return zoneContext->untilYear;
459 uint8_t numEras()
const {
460 return pgm_read_byte(&mZoneInfo->numEras);
464 const ZE* eras = (
const ZE*) pgm_read_ptr(&mZoneInfo->eras);
476 template <
typename ZI>
480 mZoneRegistry(zoneRegistry) {}
489 const ZI* zoneInfo(uint16_t i)
const {
490 return (
const ZI*) pgm_read_ptr(&mZoneRegistry[i]);
494 const ZI*
const* mZoneRegistry;
503 #if ACE_TIME_USE_PROGMEM 509 ZoneContext> ZoneInfoBroker;
517 ZoneContext> ZoneInfoBroker;
525 #if ACE_TIME_USE_PROGMEM 531 ZoneContext> ZoneInfoBroker;
539 ZoneContext> ZoneInfoBroker;
Data broker for accessing ZonePolicy in SRAM.
Data broker for accessing ZoneRule in SRAM.
Data broker for accessing ZonePolicy in PROGMEM.
Data broker for accessing the ZoneRegistry in SRAM.
Data broker for accessing ZoneInfo in PROGMEM.
Data broker for accessing ZoneEra in SRAM.
Data broker for accessing ZoneEra in PROGMEM.
Data broker for accessing the ZoneRegistry in PROGMEM.
Data broker for accessing ZoneInfo in SRAM.
uint8_t toModifier(uint8_t rawModifier)
Extract the 'w', 's' 'u' suffix from the 'modifier' field, so that they can be compared against TIME_...
uint16_t timeCodeToMinutes(uint8_t rawCode, uint8_t rawModifier)
Convert (timeCode, timeModifier) fields in zoneinfo to minutes.
Data broker for accessing ZoneRule in PROGMEM.