AceTime
3.0.0
Date and time classes for Arduino that support timezones from the TZ Database.
|
Class that allows looking up the ZoneInfo from its TZDB identifier (e.g. More...
#include <ZoneRegistrar.h>
Public Member Functions | |
ZoneRegistrarTemplate (uint16_t zoneRegistrySize, const typename D::ZoneInfo *const *zoneRegistry) | |
Constructor. | |
uint16_t | zoneRegistrySize () const |
Return the number of zones and (fat) links. | |
const D::ZoneInfo * | getZoneInfoForIndex (uint16_t i) const |
Return the ZoneInfo at index i. More... | |
const D::ZoneInfo * | getZoneInfoForName (const char *name) const |
Return the ZoneInfo corresponding to the given zone name. More... | |
const D::ZoneInfo * | getZoneInfoForId (uint32_t zoneId) const |
Return the ZoneInfo using the zoneId. More... | |
uint16_t | findIndexForName (const char *name) const |
Find the index for zone name. More... | |
uint16_t | findIndexForId (uint32_t zoneId) const |
Find the index for zone id. More... | |
Static Public Attributes | |
static const uint16_t | kInvalidIndex = 0xffff |
Invalid index to indicate error or not found. | |
Protected Member Functions | |
friend | void ::runBasicRegistrarFindIndexForName () |
friend | void ::runBasicRegistrarFindIndexForIdBinary () |
friend | void ::runBasicRegistrarFindIndexForIdLinear () |
friend | void ::runExtendedRegistrarFindIndexForName () |
friend | void ::runExtendedRegistrarFindIndexForIdBinary () |
friend | void ::runExtendedRegistrarFindIndexForIdLinear () |
friend | void ::runCompleteRegistrarFindIndexForName () |
friend | void ::runCompleteRegistrarFindIndexForIdBinary () |
friend | void ::runCompleteRegistrarFindIndexForIdLinear () |
uint16_t | findIndexForIdLinear (uint32_t zoneId) const |
Exposed only for benchmarking purposes. | |
uint16_t | findIndexForIdBinary (uint32_t zoneId) const |
Exposed only for benchmarking purposes. | |
Static Protected Member Functions | |
static bool | isSorted (const typename D::ZoneInfo *const *registry, uint16_t registrySize) |
Determine if the given zone registry is sorted by id. | |
static uint16_t | linearSearchById (const typename D::ZoneInfo *const *registry, uint16_t registrySize, uint32_t zoneId) |
Find the registry index corresponding to zoneId using linear search. More... | |
static uint16_t | binarySearchById (const typename D::ZoneInfo *const *registry, uint16_t registrySize, uint32_t zoneId) |
Find the registry index corresponding to zoneId using a binary search. More... | |
Static Protected Attributes | |
static const uint8_t | kBinarySearchThreshold = 8 |
Use binarySearchById() if zoneRegistrySize >= threshold. | |
Class that allows looking up the ZoneInfo from its TZDB identifier (e.g.
"America/Los_Angeles"), zoneId (hash from its name), or the index in the zone registry.
D | container type of ZoneInfo database (e.g. basic::Info, extended::Info, complete::Info) |
Definition at line 46 of file ZoneRegistrar.h.
|
inlinestaticprotected |
Find the registry index corresponding to zoneId using a binary search.
Returns kInvalidIndex if not found.
The largest registrySize is UINT16_MAX so the largest valid index is UINT16_MAX - 1. This allows us to set kInvalidIndex to UINT16_MAX to indicate "Not Found".
Definition at line 191 of file ZoneRegistrar.h.
|
inline |
Find the index for zone id.
Return kInvalidIndex if not found.
Definition at line 106 of file ZoneRegistrar.h.
|
inline |
Find the index for zone name.
Return kInvalidIndex if not found.
Definition at line 89 of file ZoneRegistrar.h.
|
inline |
Return the ZoneInfo using the zoneId.
Return nullptr if not found.
Definition at line 82 of file ZoneRegistrar.h.
|
inline |
Return the ZoneInfo at index i.
Return nullptr if i is out of range.
Definition at line 65 of file ZoneRegistrar.h.
|
inline |
Return the ZoneInfo corresponding to the given zone name.
Return nullptr if not found.
Definition at line 75 of file ZoneRegistrar.h.
|
inlinestaticprotected |
Find the registry index corresponding to zoneId using linear search.
Returns kInvalidIndex if not found.
Definition at line 156 of file ZoneRegistrar.h.