6 #ifndef ACE_TIME_ZONE_REGISTRAR_H
7 #define ACE_TIME_ZONE_REGISTRAR_H
11 #include <AceCommon.h>
13 #include "internal/ZoneInfo.h"
16 class BasicZoneRegistrarTest_Sorted_isSorted;
17 class BasicZoneRegistrarTest_Sorted_linearSearchByName;
18 class BasicZoneRegistrarTest_Sorted_linearSearchByName_not_found;
19 class BasicZoneRegistrarTest_Sorted_binarySearchByName;
20 class BasicZoneRegistrarTest_Sorted_binarySearchByName_not_found;
21 class BasicZoneRegistrarTest_Sorted_linearSearchById;
22 class BasicZoneRegistrarTest_Sorted_linearSearchById_not_found;
23 class BasicZoneRegistrarTest_Unsorted_isSorted;
24 class BasicZoneRegistrarTest_Unsorted_linearSearchByName;
25 class BasicZoneRegistrarTest_Unsorted_linearSearchByName_not_found;
26 class BasicZoneRegistrarTest_Unsorted_binarySearchByName;
27 class BasicZoneRegistrarTest_Unsorted_binarySearchByName_not_found;
28 class BasicZoneRegistrarTest_Unsorted_linearSearchById;
29 class BasicZoneRegistrarTest_Unsorted_linearSearchById_not_found;
34 typedef int (*strcmp_t)(
const char*,
const char*);
49 template<
typename ZI,
typename ZRB,
typename ZIB, strcmp_t STRCMP_P,
59 mZoneRegistry(zoneRegistry),
73 return (i < mRegistrySize) ? ZRB(mZoneRegistry).zoneInfo(i) :
nullptr;
83 return ZRB(mZoneRegistry).zoneInfo(index);
90 return ZRB(mZoneRegistry).zoneInfo(index);
108 friend class ::BasicZoneRegistrarTest_Sorted_isSorted;
109 friend class ::BasicZoneRegistrarTest_Sorted_linearSearchByName;
110 friend class ::BasicZoneRegistrarTest_Sorted_linearSearchByName_not_found;
111 friend class ::BasicZoneRegistrarTest_Sorted_binarySearchByName;
112 friend class ::BasicZoneRegistrarTest_Sorted_binarySearchByName_not_found;
113 friend class ::BasicZoneRegistrarTest_Sorted_linearSearchById;
114 friend class ::BasicZoneRegistrarTest_Sorted_linearSearchById_not_found;
115 friend class ::BasicZoneRegistrarTest_Unsorted_isSorted;
116 friend class ::BasicZoneRegistrarTest_Unsorted_linearSearchByName;
117 friend class ::BasicZoneRegistrarTest_Unsorted_linearSearchByName_not_found;
118 friend class ::BasicZoneRegistrarTest_Unsorted_binarySearchByName;
119 friend class ::BasicZoneRegistrarTest_Unsorted_binarySearchByName_not_found;
120 friend class ::BasicZoneRegistrarTest_Unsorted_linearSearchById;
121 friend class ::BasicZoneRegistrarTest_Unsorted_linearSearchById_not_found;
132 const ZRB zoneRegistry(registry);
133 const char* prevName = ZIB(zoneRegistry.zoneInfo(0)).name();
135 const char* currName = ZIB(zoneRegistry.zoneInfo(i)).name();
136 if (STRCMP_PP(prevName, currName) > 0) {
150 const ZRB zoneRegistry(registry);
152 const ZI* zoneInfo = zoneRegistry.zoneInfo(i);
153 if (STRCMP_P(name, ZIB(zoneInfo).name()) == 0) {
168 const ZRB zoneRegistry(registry);
170 uint16_t c = (a + b) / 2;
171 const ZI* zoneInfo = zoneRegistry.zoneInfo(c);
172 int8_t compare = STRCMP_P(name, ZIB(zoneInfo).name());
173 if (compare == 0)
return c;
186 const ZRB zoneRegistry(registry);
188 const ZI* zoneInfo = zoneRegistry.zoneInfo(i);
189 if (zoneId == ZIB(zoneInfo).zoneId()) {
196 uint16_t
const mRegistrySize;
197 const ZI*
const*
const mZoneRegistry;
198 bool const mIsSorted;
205 #if ACE_TIME_USE_PROGMEM
206 typedef ZoneRegistrar<basic::ZoneInfo, basic::ZoneRegistryBroker,
207 basic::ZoneInfoBroker, acetime_strcmp_P, ace_common::strcmp_PP>
210 typedef ZoneRegistrar<basic::ZoneInfo, basic::ZoneRegistryBroker,
211 basic::ZoneInfoBroker, strcmp, strcmp> BasicZoneRegistrar;
218 #if ACE_TIME_USE_PROGMEM
219 typedef ZoneRegistrar<extended::ZoneInfo, extended::ZoneRegistryBroker,
220 extended::ZoneInfoBroker, acetime_strcmp_P, ace_common::strcmp_PP>
221 ExtendedZoneRegistrar;
223 typedef ZoneRegistrar<extended::ZoneInfo, extended::ZoneRegistryBroker,
224 extended::ZoneInfoBroker, strcmp, strcmp> ExtendedZoneRegistrar;