6 #ifndef ACE_TIME_EXTENDED_BROKERS_H
7 #define ACE_TIME_EXTENDED_BROKERS_H
39 #include "../common/compat.h"
42 #include "LinkEntry.h"
44 class __FlashStringHelper;
58 return ((int8_t)((uint8_t)deltaCode & 0x0f) - 4) * 15;
67 return (offsetCode * 15) + (((uint8_t)deltaCode & 0xf0) >> 4);
76 mZoneRule(zoneRule) {}
84 bool isNull()
const {
return mZoneRule ==
nullptr; }
86 #if ACE_TIME_USE_PROGMEM
88 int8_t fromYearTiny()
const {
89 return pgm_read_byte(&mZoneRule->fromYearTiny);
92 int8_t toYearTiny()
const {
93 return pgm_read_byte(&mZoneRule->toYearTiny);
96 uint8_t inMonth()
const {
97 return pgm_read_byte(&mZoneRule->inMonth);
100 uint8_t onDayOfWeek()
const {
101 return pgm_read_byte(&mZoneRule->onDayOfWeek);
104 int8_t onDayOfMonth()
const {
105 return pgm_read_byte(&mZoneRule->onDayOfMonth);
108 uint16_t atTimeMinutes()
const {
109 return internal::timeCodeToMinutes(
110 pgm_read_byte(&mZoneRule->atTimeCode),
111 pgm_read_byte(&mZoneRule->atTimeModifier));
114 uint8_t atTimeSuffix()
const {
115 return internal::toSuffix(pgm_read_byte(&mZoneRule->atTimeModifier));
118 int16_t deltaMinutes()
const {
122 uint8_t letter()
const {
123 return pgm_read_byte(&mZoneRule->letter);
128 int8_t fromYearTiny()
const {
return mZoneRule->fromYearTiny; }
130 int8_t toYearTiny()
const {
return mZoneRule->toYearTiny; }
132 uint8_t inMonth()
const {
return mZoneRule->inMonth; }
134 int8_t onDayOfWeek()
const {
return mZoneRule->onDayOfWeek; }
136 int8_t onDayOfMonth()
const {
return mZoneRule->onDayOfMonth; }
138 uint16_t atTimeMinutes()
const {
139 return internal::timeCodeToMinutes(
140 mZoneRule->atTimeCode, mZoneRule->atTimeModifier);
143 uint8_t atTimeSuffix()
const {
144 return internal::toSuffix(mZoneRule->atTimeModifier);
147 int16_t deltaMinutes()
const {
151 uint8_t letter()
const {
return mZoneRule->letter; }
156 const ZoneRule* mZoneRule;
163 mZonePolicy(zonePolicy) {}
171 bool isNull()
const {
return mZonePolicy ==
nullptr; }
173 #if ACE_TIME_USE_PROGMEM
175 uint8_t numRules()
const {
176 return pgm_read_byte(&mZonePolicy->numRules);
180 const ZoneRule* rules =
181 (
const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
185 uint8_t numLetters()
const {
186 return pgm_read_byte(&mZonePolicy->numLetters);
189 const char* letter(uint8_t i)
const {
190 const char*
const* letters = (
const char*
const*)
191 pgm_read_ptr(&mZonePolicy->letters);
192 return (
const char*) pgm_read_ptr(&letters[i]);
197 uint8_t numRules()
const {
return mZonePolicy->numRules; }
203 uint8_t numLetters()
const {
return mZonePolicy->numLetters; }
205 const char* letter(uint8_t i)
const {
206 return mZonePolicy->letters[i];
212 const ZonePolicy* mZonePolicy;
229 bool isNull()
const {
return mZoneEra ==
nullptr; }
234 return mZoneEra == other.mZoneEra;
237 #if ACE_TIME_USE_PROGMEM
241 (
const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
244 int16_t offsetMinutes()
const {
246 pgm_read_byte(&mZoneEra->offsetCode),
247 pgm_read_byte(&mZoneEra->deltaCode));
250 int16_t deltaMinutes()
const {
254 const char* format()
const {
255 return (
const char*) pgm_read_ptr(&mZoneEra->format);
258 int8_t untilYearTiny()
const {
259 return pgm_read_byte(&mZoneEra->untilYearTiny);
262 uint8_t untilMonth()
const {
263 return pgm_read_byte(&mZoneEra->untilMonth);
266 uint8_t untilDay()
const {
267 return pgm_read_byte(&mZoneEra->untilDay);
270 uint16_t untilTimeMinutes()
const {
271 return internal::timeCodeToMinutes(
272 pgm_read_byte(&mZoneEra->untilTimeCode),
273 pgm_read_byte(&mZoneEra->untilTimeModifier));
276 uint8_t untilTimeSuffix()
const {
277 return internal::toSuffix(pgm_read_byte(&mZoneEra->untilTimeModifier));
286 int16_t offsetMinutes()
const {
290 int16_t deltaMinutes()
const {
294 const char* format()
const {
return mZoneEra->format; }
296 int8_t untilYearTiny()
const {
return mZoneEra->untilYearTiny; }
298 uint8_t untilMonth()
const {
return mZoneEra->untilMonth; }
300 uint8_t untilDay()
const {
return mZoneEra->untilDay; }
302 uint16_t untilTimeMinutes()
const {
303 return internal::timeCodeToMinutes(
304 mZoneEra->untilTimeCode, mZoneEra->untilTimeModifier);
307 uint8_t untilTimeSuffix()
const {
308 return internal::toSuffix(mZoneEra->untilTimeModifier);
314 const ZoneEra* mZoneEra;
321 mZoneInfo(zoneInfo) {}
329 bool equals(uintptr_t zoneInfo)
const {
330 return mZoneInfo == (
const ZoneInfo*) zoneInfo;
334 return mZoneInfo == zoneInfoBroker.mZoneInfo;
337 bool isNull()
const {
return mZoneInfo ==
nullptr; }
339 bool isLink()
const {
return pgm_read_byte(&mZoneInfo->numEras) == 0; }
346 return ZoneInfoBroker((
const ZoneInfo*) pgm_read_ptr(&mZoneInfo->eras));
349 #if ACE_TIME_USE_PROGMEM
353 pgm_read_ptr(&mZoneInfo->zoneContext);
356 const __FlashStringHelper* name()
const {
357 return FPSTR(pgm_read_ptr(&mZoneInfo->name));
360 uint32_t zoneId()
const {
361 return pgm_read_dword(&mZoneInfo->zoneId);
364 uint8_t numEras()
const {
368 return pgm_read_byte(&mZoneInfo->numEras);
372 const ZoneEraBroker era(uint8_t i)
const {
376 auto eras = (
const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
377 return ZoneEraBroker(&eras[i]);
383 const internal::ZoneContext* zoneContext()
const {
384 return mZoneInfo->zoneContext;
387 const char* name()
const {
return mZoneInfo->name; }
389 uint32_t zoneId()
const {
return mZoneInfo->zoneId; }
391 uint8_t numEras()
const {
return mZoneInfo->numEras; }
393 const ZoneEraBroker era(uint8_t i)
const {
394 return ZoneEraBroker(&mZoneInfo->eras[i]);
409 const ZoneInfo* mZoneInfo;
419 mZoneRegistry(zoneRegistry) {}
427 #if ACE_TIME_USE_PROGMEM
429 const ZoneInfo* zoneInfo(uint16_t i)
const {
430 return (
const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
435 const ZoneInfo* zoneInfo(uint16_t i)
const {
436 return mZoneRegistry[i];
442 const ZoneInfo*
const* mZoneRegistry;
451 mLinkEntry(linkEntry) {}
459 #if ACE_TIME_USE_PROGMEM
460 uint32_t zoneId()
const {
return pgm_read_dword(&mLinkEntry->zoneId); }
461 uint32_t linkId()
const {
return pgm_read_dword(&mLinkEntry->linkId); }
464 uint32_t zoneId()
const {
return mLinkEntry->zoneId; }
465 uint32_t linkId()
const {
return mLinkEntry->linkId; }
470 const LinkEntry* mLinkEntry;
479 mLinkRegistry(zoneRegistry) {}
490 const LinkEntry* linkEntry(uint16_t i)
const {
491 return &mLinkRegistry[i];
495 const LinkEntry* mLinkRegistry;