6 #ifndef ACE_TIME_BASIC_BROKERS_H
7 #define ACE_TIME_BASIC_BROKERS_H
39 #include "../common/compat.h"
43 class __FlashStringHelper;
53 mZoneRule(zoneRule) {}
61 bool isNull()
const {
return mZoneRule ==
nullptr; }
63 #if ACE_TIME_USE_PROGMEM
65 int16_t fromYear()
const {
66 return pgm_read_word(&mZoneRule->fromYear);
69 int16_t toYear()
const {
70 return pgm_read_word(&mZoneRule->toYear);
73 uint8_t inMonth()
const {
74 return pgm_read_byte(&mZoneRule->inMonth);
77 int8_t onDayOfWeek()
const {
78 return pgm_read_byte(&mZoneRule->onDayOfWeek);
81 int8_t onDayOfMonth()
const {
82 return pgm_read_byte(&mZoneRule->onDayOfMonth);
85 uint16_t atTimeMinutes()
const {
86 return internal::timeCodeToMinutes(
87 pgm_read_byte(&mZoneRule->atTimeCode),
88 pgm_read_byte(&mZoneRule->atTimeModifier));
91 uint8_t atTimeSuffix()
const {
92 return internal::toSuffix(pgm_read_byte(&mZoneRule->atTimeModifier));
95 int16_t deltaMinutes()
const {
96 return 15 * (int8_t) pgm_read_byte(&mZoneRule->deltaCode);
99 uint8_t letter()
const {
100 return pgm_read_byte(&mZoneRule->letter);
105 int16_t fromYear()
const {
return mZoneRule->fromYear; }
107 int16_t toYear()
const {
return mZoneRule->toYear; }
109 uint8_t inMonth()
const {
return mZoneRule->inMonth; }
111 uint8_t onDayOfWeek()
const {
return mZoneRule->onDayOfWeek; }
113 int8_t onDayOfMonth()
const {
return mZoneRule->onDayOfMonth; }
115 uint16_t atTimeMinutes()
const {
116 return internal::timeCodeToMinutes(
117 mZoneRule->atTimeCode, mZoneRule->atTimeModifier);
120 uint8_t atTimeSuffix()
const {
121 return internal::toSuffix(mZoneRule->atTimeModifier);
124 int16_t deltaMinutes()
const {
return 15 * mZoneRule->deltaCode; }
126 uint8_t letter()
const {
return mZoneRule->letter; }
131 const ZoneRule* mZoneRule;
138 mZonePolicy(zonePolicy) {}
146 bool isNull()
const {
return mZonePolicy ==
nullptr; }
148 #if ACE_TIME_USE_PROGMEM
150 uint8_t numRules()
const {
151 return pgm_read_byte(&mZonePolicy->numRules);
155 const ZoneRule* rules =
156 (
const ZoneRule*) pgm_read_ptr(&mZonePolicy->rules);
160 uint8_t numLetters()
const {
161 return pgm_read_byte(&mZonePolicy->numLetters);
164 const char* letter(uint8_t i)
const {
165 const char*
const* letters = (
const char*
const*)
166 pgm_read_ptr(&mZonePolicy->letters);
167 return (
const char*) pgm_read_ptr(&letters[i]);
172 uint8_t numRules()
const {
return mZonePolicy->numRules; }
178 uint8_t numLetters()
const {
return mZonePolicy->numLetters; }
180 const char* letter(uint8_t i)
const {
181 return mZonePolicy->letters[i];
187 const ZonePolicy* mZonePolicy;
204 bool isNull()
const {
return mZoneEra ==
nullptr; }
207 return mZoneEra == other.mZoneEra;
210 #if ACE_TIME_USE_PROGMEM
214 (
const ZonePolicy*) pgm_read_ptr(&mZoneEra->zonePolicy));
217 int16_t offsetMinutes()
const {
218 return 15 * (int8_t) pgm_read_byte(&mZoneEra->offsetCode);
221 int16_t deltaMinutes()
const {
222 return 15 * (int8_t) pgm_read_byte(&mZoneEra->deltaCode);
225 const char* format()
const {
226 return (
const char*) pgm_read_ptr(&mZoneEra->format);
229 int16_t untilYear()
const {
230 return pgm_read_word(&mZoneEra->untilYear);
233 uint8_t untilMonth()
const {
234 return pgm_read_byte(&mZoneEra->untilMonth);
237 uint8_t untilDay()
const {
238 return pgm_read_byte(&mZoneEra->untilDay);
241 uint16_t untilTimeMinutes()
const {
242 return internal::timeCodeToMinutes(
243 pgm_read_byte(&mZoneEra->untilTimeCode),
244 pgm_read_byte(&mZoneEra->untilTimeModifier));
247 uint8_t untilTimeSuffix()
const {
248 return internal::toSuffix(pgm_read_byte(&mZoneEra->untilTimeModifier));
253 int16_t offsetMinutes()
const {
return 15 * mZoneEra->offsetCode; }
259 int16_t deltaMinutes()
const {
return 15 * mZoneEra->deltaCode; }
261 const char* format()
const {
return mZoneEra->format; }
263 int16_t untilYear()
const {
return mZoneEra->untilYear; }
265 uint8_t untilMonth()
const {
return mZoneEra->untilMonth; }
267 uint8_t untilDay()
const {
return mZoneEra->untilDay; }
269 uint16_t untilTimeMinutes()
const {
270 return internal::timeCodeToMinutes(
271 mZoneEra->untilTimeCode, mZoneEra->untilTimeModifier);
274 uint8_t untilTimeSuffix()
const {
275 return internal::toSuffix(mZoneEra->untilTimeModifier);
281 const ZoneEra* mZoneEra;
288 mZoneInfo(zoneInfo) {}
301 return mZoneInfo == (
const ZoneInfo*) zoneKey;
305 return mZoneInfo == zoneInfoBroker.mZoneInfo;
308 bool isNull()
const {
return mZoneInfo ==
nullptr; }
310 #if ACE_TIME_USE_PROGMEM
312 const internal::ZoneContext* zoneContext()
const {
313 return (
const internal::ZoneContext*)
314 pgm_read_ptr(&mZoneInfo->zoneContext);
317 const __FlashStringHelper* name()
const {
318 return FPSTR(pgm_read_ptr(&mZoneInfo->name));
321 uint32_t zoneId()
const {
322 return pgm_read_dword(&mZoneInfo->zoneId);
325 uint8_t numEras()
const {
326 return pgm_read_byte(&mZoneInfo->numEras);
329 const ZoneEraBroker era(uint8_t i)
const {
330 auto eras = (
const ZoneEra*) pgm_read_ptr(&mZoneInfo->eras);
331 return ZoneEraBroker(&eras[i]);
334 bool isLink()
const {
335 return mZoneInfo->targetInfo !=
nullptr;
338 const ZoneInfoBroker targetInfo()
const {
339 return ZoneInfoBroker((
const ZoneInfo*)
340 pgm_read_ptr(&mZoneInfo->targetInfo));
345 const internal::ZoneContext* zoneContext()
const {
346 return mZoneInfo->zoneContext;
349 const char* name()
const {
return mZoneInfo->name; }
351 uint32_t zoneId()
const {
return mZoneInfo->zoneId; }
353 uint8_t numEras()
const {
return mZoneInfo->numEras; }
355 const ZoneEraBroker era(uint8_t i)
const {
356 return ZoneEraBroker(&mZoneInfo->eras[i]);
359 const ZoneInfoBroker targetZoneInfo()
const {
360 return ZoneInfoBroker(mZoneInfo->targetInfo);
375 const ZoneInfo* mZoneInfo;
385 mZoneRegistry(zoneRegistry) {}
393 #if ACE_TIME_USE_PROGMEM
395 const ZoneInfo* zoneInfo(uint16_t i)
const {
396 return (
const ZoneInfo*) pgm_read_ptr(&mZoneRegistry[i]);
401 const ZoneInfo* zoneInfo(uint16_t i)
const {
402 return mZoneRegistry[i];
408 const ZoneInfo*
const* mZoneRegistry;
Helper functions are used in both Basic brokers and Extended brokers.
A factory that creates a basic::ZoneInfoBroker.
ZoneInfoBroker createZoneInfoBroker(uintptr_t zoneKey) const
Data broker for accessing ZoneEra.
Data broker for accessing ZoneInfo.
void printShortNameTo(Print &printer) const
Print a short human-readable identifier (e.g.
void printNameTo(Print &printer) const
Print a human-readable identifier (e.g.
bool equals(uintptr_t zoneKey) const
Data broker for accessing ZonePolicy.
Data broker for accessing the ZoneRegistry.
Data broker for accessing ZoneRule.