AceTime 2.4.0 Date and time classes for Arduino that support timezones from the TZ Database.

Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Static Protected Attributes | Friends | List of all members
ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB > Class Template Reference

Class that allows looking up the ZoneInfo (ZI) from its TZDB identifier (e.g. More...

`#include <ZoneRegistrar.h>`

## Public Member Functions
| ZoneRegistrarTemplate (uint16_t zoneRegistrySize, const ZI *const *zoneRegistry)
| Constructor.
uint16_t | zoneRegistrySize () const
| Return the number of zones and (fat) links.
const ZI * | getZoneInfoForIndex (uint16_t i) const
| Return the ZoneInfo at index i. More...
const ZI * | getZoneInfoForName (const char *name) const
| Return the ZoneInfo corresponding to the given zone name. More...
const ZI * | 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 ZI *const *registry, uint16_t registrySize)
| Determine if the given zone registry is sorted by id.
static uint16_t | linearSearchById (const ZI *const *registry, uint16_t registrySize, uint32_t zoneId)
| Find the registry index corresponding to zoneId using linear search. More...
static uint16_t | binarySearchById (const ZI *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.

## Friends
class | ::ZoneRegistrarTest_Sorted_isSorted
class | ::ZoneRegistrarTest_Unsorted_isSorted
class | ::ZoneRegistrarTest_Sorted_linearSearchById
class | ::ZoneRegistrarTest_Sorted_linearSearchById_not_found
class | ::ZoneRegistrarTest_Sorted_binarySearchById_zeroEntries
class | ::ZoneRegistrarTest_Sorted_binarySearchById
class | ::ZoneRegistrarTest_Sorted_binarySearchById_not_found
class | ::ZoneRegistrarTest_Unsorted_linearSearchById
class | ::ZoneRegistrarTest_Unsorted_linearSearchById_not_found

## Detailed Description

### template<typename ZI, typename ZIB, typename ZRGB>
class ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB >

Class that allows looking up the ZoneInfo (ZI) from its TZDB identifier (e.g.

"America/Los_Angeles"), zoneId (hash from its name), or the index in the zone registry.

Template Parameters

  ZI | ZoneInfo type (e.g. basic::ZoneInfo)
  ZIB | ZoneInfoBroker type (e.g. basic::ZoneInfoBroker)
  ZRGB | ZoneRegistryBroker type (e.g. basic::ZoneRegistryBroker)

Definition at line 49 of file ZoneRegistrar.h.

## Member Function Documentation

## ◆ binarySearchById()

template<typename ZI , typename ZIB , typename ZRGB >

static uint16_t ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB >::binarySearchById | ( | const ZI *const * | registry,
|  | uint16_t | registrySize,
|  | uint32_t | zoneId
| ) |  |
| inline static protected

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 188 of file ZoneRegistrar.h.

## ◆ findIndexForId()

template<typename ZI , typename ZIB , typename ZRGB >

uint16_t ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB >::findIndexForId | ( | uint32_t | zoneId | ) | const
| inline

Find the index for zone id.

Return kInvalidIndex if not found.

Definition at line 108 of file ZoneRegistrar.h.

## ◆ findIndexForName()

template<typename ZI , typename ZIB , typename ZRGB >

uint16_t ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB >::findIndexForName | ( | const char * | name | ) | const
| inline

Find the index for zone name.

Return kInvalidIndex if not found.

Definition at line 92 of file ZoneRegistrar.h.

## ◆ getZoneInfoForId()

template<typename ZI , typename ZIB , typename ZRGB >

const ZI* ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB >::getZoneInfoForId | ( | uint32_t | zoneId | ) | const
| inline

Return the ZoneInfo using the zoneId.

Return nullptr if not found.

Definition at line 85 of file ZoneRegistrar.h.

## ◆ getZoneInfoForIndex()

template<typename ZI , typename ZIB , typename ZRGB >

const ZI* ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB >::getZoneInfoForIndex | ( | uint16_t | i | ) | const
| inline

Return the ZoneInfo at index i.

Return nullptr if i is out of range.

Definition at line 68 of file ZoneRegistrar.h.

## ◆ getZoneInfoForName()

template<typename ZI , typename ZIB , typename ZRGB >

const ZI* ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB >::getZoneInfoForName | ( | const char * | name | ) | const
| inline

Return the ZoneInfo corresponding to the given zone name.

Return nullptr if not found.

Definition at line 78 of file ZoneRegistrar.h.

## ◆ linearSearchById()

template<typename ZI , typename ZIB , typename ZRGB >

static uint16_t ace_time::internal::ZoneRegistrarTemplate< ZI, ZIB, ZRGB >::linearSearchById | ( | const ZI *const * | registry,
|  | uint16_t | registrySize,
|  | uint32_t | zoneId
| ) |  |
| inline static protected

Find the registry index corresponding to zoneId using linear search.

Returns kInvalidIndex if not found.

Definition at line 155 of file ZoneRegistrar.h.

The documentation for this class was generated from the following file:

- /home/brian/src/AceTime/src/ace_time/ZoneRegistrar.h