AceTime  1.11.1
Date and time classes for Arduino that support timezones from the TZ Database.
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 
21 class LinkManager {
22  public:
27  static const uint32_t kInvalidZoneId = 0;
28 };
29 
35  public:
42  uint16_t linkRegistrySize,
43  const basic::LinkEntry* linkRegistry
44  ) :
45  mLinkRegistrar(linkRegistrySize, linkRegistry)
46  {}
47 
48  uint32_t zoneIdForLinkId(uint32_t linkId) const {
49  const basic::LinkEntry* linkEntry =
50  mLinkRegistrar.getLinkEntryForId(linkId);
51  if (! linkEntry) return kInvalidZoneId;
52  return basic::LinkEntryBroker(linkEntry).zoneId();
53  }
54 
55  uint16_t linkRegistrySize() const {
56  return mLinkRegistrar.linkRegistrySize();
57  }
58 
59  private:
60  // disable copy constructor and assignment operator
61  BasicLinkManager(const BasicLinkManager&) = delete;
62  BasicLinkManager& operator=(const BasicLinkManager&) = delete;
63 
64  const basic::LinkRegistrar mLinkRegistrar;
65 };
66 
72  public:
79  uint16_t linkRegistrySize,
80  const extended::LinkEntry* linkRegistry
81  ) :
82  mLinkRegistrar(linkRegistrySize, linkRegistry)
83  {}
84 
85  uint32_t zoneIdForLinkId(uint32_t linkId) const {
86  const extended::LinkEntry* linkEntry =
87  mLinkRegistrar.getLinkEntryForId(linkId);
88  if (! linkEntry) return kInvalidZoneId;
89  return extended::LinkEntryBroker(linkEntry).zoneId();
90  }
91 
92  uint16_t linkRegistrySize() const {
93  return mLinkRegistrar.linkRegistrySize();
94  }
95 
96  private:
97  // disable copy constructor and assignment operator
99  ExtendedLinkManager& operator=(const ExtendedLinkManager&) = delete;
100 
101  const extended::LinkRegistrar mLinkRegistrar;
102 };
103 
104 }
105 
106 #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::extended::LinkEntryBroker
Data broker for accessing a LinkEntry.
Definition: ExtendedBrokers.h:448
BasicBrokers.h
ace_time::internal::LinkRegistrarTemplate::linkRegistrySize
uint16_t linkRegistrySize() const
Return the number of (thin) links.
Definition: LinkRegistrar.h:46
ace_time::LinkManager
Base class for BasicLinkManager and ExtendedLinkManager mostly for backwards compatibility so that kI...
Definition: LinkManager.h:21
ace_time::BasicLinkManager
An implementation of the LinkManager which uses a registry of basic::ZoneInfo records.
Definition: LinkManager.h:34
ExtendedBrokers.h
ace_time::basic::LinkEntryBroker
Data broker for accessing a LinkEntry.
Definition: BasicBrokers.h:416
ace_time::ExtendedLinkManager::ExtendedLinkManager
ExtendedLinkManager(uint16_t linkRegistrySize, const extended::LinkEntry *linkRegistry)
Constructor.
Definition: LinkManager.h:78
ace_time::BasicLinkManager::BasicLinkManager
BasicLinkManager(uint16_t linkRegistrySize, const basic::LinkEntry *linkRegistry)
Constructor.
Definition: LinkManager.h:41
ace_time::ExtendedLinkManager
An implementation of the LinkManager which uses a registry of extended::ZoneInfo records.
Definition: LinkManager.h:71
ace_time::LinkManager::kInvalidZoneId
static const uint32_t kInvalidZoneId
ZoneId which is not valid to indicates an error or not found.
Definition: LinkManager.h:27