AceTime  1.8.0
Date and time classes for Arduino that support timezones from the TZ Database, and a system clock that can synchronize from an NTP server or an RTC chip.
LinkManager.h
1 /*
2  * MIT License
3  * Copyright (c) 2021 Brian T. Park
4  */
5 
6 #ifndef ACE_TIME_LINK_MANAGER_H
7 #define ACE_TIME_LINK_MANAGER_H
8 
9 #include "internal/LinkRegistrar.h"
10 #include "internal/BasicBrokers.h"
12 
13 namespace ace_time {
14 
19 class LinkManager {
20  public:
25  static const uint32_t kInvalidZoneId = 0;
26 
31  virtual uint32_t zoneIdForLinkId(uint32_t linkId) const = 0;
32 
36  virtual uint16_t linkRegistrySize() const = 0;
37 };
38 
44  public:
51  uint16_t linkRegistrySize,
52  const basic::LinkEntry* linkRegistry
53  ) :
54  mLinkRegistrar(linkRegistrySize, linkRegistry)
55  {}
56 
57  uint32_t zoneIdForLinkId(uint32_t linkId) const override {
58  const basic::LinkEntry* linkEntry =
59  mLinkRegistrar.getLinkEntryForId(linkId);
60  if (! linkEntry) return kInvalidZoneId;
61  return basic::LinkEntryBroker(linkEntry).zoneId();
62  }
63 
64  uint16_t linkRegistrySize() const override {
65  return mLinkRegistrar.linkRegistrySize();
66  }
67 
68  private:
69  // disable copy constructor and assignment operator
70  BasicLinkManager(const BasicLinkManager&) = delete;
71  BasicLinkManager& operator=(const BasicLinkManager&) = delete;
72 
73  const basic::LinkRegistrar mLinkRegistrar;
74 };
75 
81  public:
88  uint16_t linkRegistrySize,
89  const extended::LinkEntry* linkRegistry
90  ) :
91  mLinkRegistrar(linkRegistrySize, linkRegistry)
92  {}
93 
94  uint32_t zoneIdForLinkId(uint32_t linkId) const override {
95  const extended::LinkEntry* linkEntry =
96  mLinkRegistrar.getLinkEntryForId(linkId);
97  if (! linkEntry) return kInvalidZoneId;
98  return extended::LinkEntryBroker(linkEntry).zoneId();
99  }
100 
101  uint16_t linkRegistrySize() const override {
102  return mLinkRegistrar.linkRegistrySize();
103  }
104 
105  private:
106  // disable copy constructor and assignment operator
107  ExtendedLinkManager(const ExtendedLinkManager&) = delete;
108  ExtendedLinkManager& operator=(const ExtendedLinkManager&) = delete;
109 
110  const extended::LinkRegistrar mLinkRegistrar;
111 };
112 
113 }
114 
115 #endif
ace_time::internal::LinkRegistrarTemplate::getLinkEntryForId
const LE * getLinkEntryForId(uint32_t linkId) const
Return the LinkEntry using the linkId.
Definition: LinkRegistrar.h:56
ace_time::ExtendedLinkManager::linkRegistrySize
uint16_t linkRegistrySize() const override
Return the number of elements in the (thin) Link registry.
Definition: LinkManager.h:101
ace_time::extended::LinkEntryBroker
Data broker for accessing a LinkEntry.
Definition: ExtendedBrokers.h:425
ace_time::ExtendedLinkManager::zoneIdForLinkId
uint32_t zoneIdForLinkId(uint32_t linkId) const override
Find the registry index for the given time link id.
Definition: LinkManager.h:94
BasicBrokers.h
ace_time::internal::LinkRegistrarTemplate::linkRegistrySize
uint16_t linkRegistrySize() const
Return the number of (thin) links.
Definition: LinkRegistrar.h:46
ace_time::LinkManager
Common interface to the BasicLinkManager and ExtendedLinkManager so that a single interface can be pa...
Definition: LinkManager.h:19
ace_time::extended::LinkRegistrar
Concrete template instantiation of LinkRegistrarTemplate for extended::LinkEntry.
Definition: LinkRegistrar.h:212
ace_time::BasicLinkManager::linkRegistrySize
uint16_t linkRegistrySize() const override
Return the number of elements in the (thin) Link registry.
Definition: LinkManager.h:64
ace_time::BasicLinkManager::zoneIdForLinkId
uint32_t zoneIdForLinkId(uint32_t linkId) const override
Find the registry index for the given time link id.
Definition: LinkManager.h:57
ace_time::LinkManager::zoneIdForLinkId
virtual uint32_t zoneIdForLinkId(uint32_t linkId) const =0
Find the registry index for the given time link id.
ace_time::BasicLinkManager
An implementation of the LinkManager which uses a registry of basic::ZoneInfo records.
Definition: LinkManager.h:43
ExtendedBrokers.h
ace_time::basic::LinkEntryBroker
Data broker for accessing a LinkEntry.
Definition: BasicBrokers.h:393
ace_time::ExtendedLinkManager::ExtendedLinkManager
ExtendedLinkManager(uint16_t linkRegistrySize, const extended::LinkEntry *linkRegistry)
Constructor.
Definition: LinkManager.h:87
ace_time::BasicLinkManager::BasicLinkManager
BasicLinkManager(uint16_t linkRegistrySize, const basic::LinkEntry *linkRegistry)
Constructor.
Definition: LinkManager.h:50
ace_time::basic::LinkRegistrar
Concrete template instantiation of LinkRegistrarTemplate for basic::LinkEntry.
Definition: LinkRegistrar.h:170
ace_time::ExtendedLinkManager
An implementation of the LinkManager which uses a registry of extended::ZoneInfo records.
Definition: LinkManager.h:80
ace_time::LinkManager::linkRegistrySize
virtual uint16_t linkRegistrySize() const =0
Return the number of elements in the (thin) Link registry.
ace_time::LinkManager::kInvalidZoneId
static const uint32_t kInvalidZoneId
ZoneId which is not valid to indicates an error or not found.
Definition: LinkManager.h:25