6 #ifndef ACE_TIME_LINK_REGISTRAR_H
7 #define ACE_TIME_LINK_REGISTRAR_H
10 #include <AceCommon.h>
11 #include "../common/compat.h"
12 #include "LinkEntry.h"
16 class LinkRegistrarTest_isSorted;
29 template<
typename LE,
typename LEB,
typename LRGB>
38 const LE* linkRegistry
42 mLinkRegistry(linkRegistry)
50 return (mLinkRegistry && i < mLinkRegistrySize)
51 ? LRGB(mLinkRegistry).linkEntry(i)
57 if (mLinkRegistrySize == 0 || mLinkRegistry ==
nullptr) {
62 return LRGB(mLinkRegistry).linkEntry(index);
75 friend class ::LinkRegistrarTest_isSorted;
81 static bool isSorted(
const LE* registry, uint16_t registrySize) {
82 const LRGB linkRegistry(registry);
83 return ace_common::isSortedByKey(
84 (
size_t) registrySize,
85 [&linkRegistry](
size_t i) {
86 const LE* linkEntry = linkRegistry.linkEntry(i);
87 return LEB(linkEntry).linkId();
97 uint16_t registrySize, uint32_t linkId) {
98 const LRGB linkRegistry(registry);
100 for (uint16_t i = 0; i < registrySize; ++i) {
101 const LE* linkEntry = linkRegistry.linkEntry(i);
102 if (linkId == LEB(linkEntry).linkId()) {
131 uint16_t registrySize, uint32_t linkId) {
132 const LRGB linkRegistry(registry);
133 return (uint16_t) ace_common::binarySearchByKey(
134 (
size_t) registrySize,
136 [&linkRegistry](
size_t i) {
137 const LE* linkEntry = linkRegistry.linkEntry(i);
138 return LEB(linkEntry).linkId();
155 uint16_t
const mLinkRegistrySize;
156 bool const mIsSorted;
157 const LE*
const mLinkRegistry;
172 basic::LinkEntryBroker,
173 basic::LinkRegistryBroker
178 const basic::LinkEntry* linkRegistry
214 extended::LinkEntryBroker,
215 extended::LinkRegistryBroker
220 const extended::LinkEntry* linkRegistry