6 #ifndef ACE_TIME_BASIC_BROKERS_H
7 #define ACE_TIME_BASIC_BROKERS_H
39 #include "../common/compat.h"
42 #include "LinkEntry.h"
44 class __FlashStringHelper;
54 mZoneRule(zoneRule) {}
62 bool isNull()
const {
return mZoneRule ==
nullptr; }
64 #if ACE_TIME_USE_PROGMEM
66 int8_t fromYearTiny()
const {
67 return pgm_read_byte(&mZoneRule->fromYearTiny);
70 int8_t toYearTiny()
const {
71 return pgm_read_byte(&mZoneRule->toYearTiny);
74 uint8_t inMonth()
const {
75 return pgm_read_byte(&mZoneRule->inMonth);
78 int8_t onDayOfWeek()
const {
79 return pgm_read_byte(&mZoneRule->onDayOfWeek);
82 int8_t onDayOfMonth()
const {
83 return pgm_read_byte(&mZoneRule->onDayOfMonth);
86 uint16_t atTimeMinutes()
const {
87 return internal::timeCodeToMinutes(
88 pgm_read_byte(&mZoneRule->atTimeCode),
89 pgm_read_byte(&mZoneRule->atTimeModifier));
92 uint8_t atTimeSuffix()
const {
93 return internal::toSuffix(pgm_read_byte(&mZoneRule->atTimeModifier));
96 int16_t deltaMinutes()
const {
97 return 15 * (int8_t) pgm_read_byte(&mZoneRule->deltaCode);
100 uint8_t letter()
const {
101 return pgm_read_byte(&mZoneRule->letter);
106 int8_t fromYearTiny()
const {
return mZoneRule->fromYearTiny; }
108 int8_t toYearTiny()
const {
return mZoneRule->toYearTiny; }
110 uint8_t inMonth()
const {
return mZoneRule->inMonth; }
112 uint8_t onDayOfWeek()
const {
return mZoneRule->onDayOfWeek; }
114 int8_t onDayOfMonth()
const {
return mZoneRule->onDayOfMonth; }
116 uint16_t atTimeMinutes()
const {
117 return internal::timeCodeToMinutes(
118 mZoneRule->atTimeCode, mZoneRule->atTimeModifier);
121 uint8_t atTimeSuffix()
const {
122 return internal::toSuffix(mZoneRule->atTimeModifier);
125 int16_t deltaMinutes()
const {
return 15 * mZoneRule->deltaCode; }
127 uint8_t letter()
const {
return mZoneRule->letter; }
132 const ZoneRule* mZoneRule;
139 mZonePolicy(zonePolicy) {}
147 bool isNull()
const {
return mZonePolicy ==
nullptr; }
149 #if ACE_TIME_USE_PROGMEM
151 uint8_t numRules()
const {
152 return pgm_read_byte(&mZonePolicy->numRules);
156 const ZoneRule* rules =
157 (
const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
161 uint8_t numLetters()
const {
162 return pgm_read_byte(&mZonePolicy->numLetters);
165 const char* letter(uint8_t i)
const {
166 const char*
const* letters = (
const char*
const*)
167 pgm_read_ptr(&mZonePolicy->letters);
168 return (
const char*) pgm_read_ptr(&letters[i]);
173 uint8_t numRules()
const {
return mZonePolicy->numRules; }
179 uint8_t numLetters()
const {
return mZonePolicy->numLetters; }
181 const char* letter(uint8_t i)
const {
182 return mZonePolicy->letters[i];
188 const ZonePolicy* mZonePolicy;
205 bool isNull()
const {
return mZoneEra ==
nullptr; }
208 return mZoneEra == other.mZoneEra;
211 #if ACE_TIME_USE_PROGMEM
215 (
const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
218 int16_t offsetMinutes()
const {
219 return 15 * (int8_t) pgm_read_byte(&mZoneEra->offsetCode);
222 int16_t deltaMinutes()
const {
223 return 15 * (int8_t) pgm_read_byte(&mZoneEra->deltaCode);
226 const char* format()
const {
227 return (
const char*) pgm_read_ptr(&mZoneEra->format);
230 int8_t untilYearTiny()
const {
231 return pgm_read_byte(&mZoneEra->untilYearTiny);
234 uint8_t untilMonth()
const {
235 return pgm_read_byte(&mZoneEra->untilMonth);
238 uint8_t untilDay()
const {
239 return pgm_read_byte(&mZoneEra->untilDay);
242 uint16_t untilTimeMinutes()
const {
243 return internal::timeCodeToMinutes(
244 pgm_read_byte(&mZoneEra->untilTimeCode),
245 pgm_read_byte(&mZoneEra->untilTimeModifier));
248 uint8_t untilTimeSuffix()
const {
249 return internal::toSuffix(pgm_read_byte(&mZoneEra->untilTimeModifier));
254 int16_t offsetMinutes()
const {
return 15 * mZoneEra->offsetCode; }
260 int16_t deltaMinutes()
const {
return 15 * mZoneEra->deltaCode; }
262 const char* format()
const {
return mZoneEra->format; }
264 int8_t untilYearTiny()
const {
return mZoneEra->untilYearTiny; }
266 uint8_t untilMonth()
const {
return mZoneEra->untilMonth; }
268 uint8_t untilDay()
const {
return mZoneEra->untilDay; }
270 uint16_t untilTimeMinutes()
const {
271 return internal::timeCodeToMinutes(
272 mZoneEra->untilTimeCode, mZoneEra->untilTimeModifier);
275 uint8_t untilTimeSuffix()
const {
276 return internal::toSuffix(mZoneEra->untilTimeModifier);
282 const ZoneEra* mZoneEra;
289 mZoneInfo(zoneInfo) {}
297 bool equals(uintptr_t zoneKey)
const {
298 return mZoneInfo == (
const ZoneInfo*) zoneKey;
302 return mZoneInfo == zoneInfoBroker.mZoneInfo;
305 bool isNull()
const {
return mZoneInfo ==
nullptr; }
307 bool isLink()
const {
return pgm_read_byte(&mZoneInfo->numEras) == 0; }
314 return ZoneInfoBroker((
const ZoneInfo*) pgm_read_ptr(&mZoneInfo->eras));
317 #if ACE_TIME_USE_PROGMEM
321 pgm_read_ptr(&mZoneInfo->zoneContext);
324 const __FlashStringHelper* name()
const {
325 return FPSTR(pgm_read_ptr(&mZoneInfo->name));
328 uint32_t zoneId()
const {
329 return pgm_read_dword(&mZoneInfo->zoneId);
332 uint8_t numEras()
const {
336 return pgm_read_byte(&mZoneInfo->numEras);
340 const ZoneEraBroker era(uint8_t i)
const {
344 auto eras = (
const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
345 return ZoneEraBroker(&eras[i]);
351 const internal::ZoneContext* zoneContext()
const {
352 return mZoneInfo->zoneContext;
355 const char* name()
const {
return mZoneInfo->name; }
357 uint32_t zoneId()
const {
return mZoneInfo->zoneId; }
359 uint8_t numEras()
const {
return mZoneInfo->numEras; }
361 const ZoneEraBroker era(uint8_t i)
const {
362 return ZoneEraBroker(&mZoneInfo->eras[i]);
377 const ZoneInfo* mZoneInfo;
387 mZoneRegistry(zoneRegistry) {}
395 #if ACE_TIME_USE_PROGMEM
397 const ZoneInfo* zoneInfo(uint16_t i)
const {
398 return (
const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
403 const ZoneInfo* zoneInfo(uint16_t i)
const {
404 return mZoneRegistry[i];
410 const ZoneInfo*
const* mZoneRegistry;
419 mLinkEntry(linkEntry) {}
427 #if ACE_TIME_USE_PROGMEM
428 uint32_t zoneId()
const {
return pgm_read_dword(&mLinkEntry->zoneId); }
429 uint32_t linkId()
const {
return pgm_read_dword(&mLinkEntry->linkId); }
432 uint32_t zoneId()
const {
return mLinkEntry->zoneId; }
433 uint32_t linkId()
const {
return mLinkEntry->linkId; }
438 const LinkEntry* mLinkEntry;
447 mLinkRegistry(zoneRegistry) {}
456 const LinkEntry* linkEntry(uint16_t i)
const {
457 return &mLinkRegistry[i];
461 const LinkEntry* mLinkRegistry;