GPBDictionary_PackagePrivate.h 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465
  1. // Protocol Buffers - Google's data interchange format
  2. // Copyright 2008 Google Inc. All rights reserved.
  3. //
  4. // Use of this source code is governed by a BSD-style
  5. // license that can be found in the LICENSE file or at
  6. // https://developers.google.com/open-source/licenses/bsd
  7. #import <Foundation/Foundation.h>
  8. #import "GPBDictionary.h"
  9. #import "GPBCodedInputStream.h"
  10. #import "GPBCodedOutputStream.h"
  11. #import "GPBDescriptor.h"
  12. #import "GPBExtensionRegistry.h"
  13. @protocol GPBDictionaryInternalsProtocol
  14. - (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field;
  15. - (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream
  16. asField:(GPBFieldDescriptor *)field;
  17. - (void)setGPBGenericValue:(GPBGenericValue *)value forGPBGenericValueKey:(GPBGenericValue *)key;
  18. - (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block;
  19. @end
  20. // Disable clang-format for the macros.
  21. // clang-format off
  22. //%PDDM-DEFINE DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(KEY_NAME)
  23. //%DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(KEY_NAME)
  24. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Object, Object)
  25. //%PDDM-DEFINE DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(KEY_NAME)
  26. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, UInt32, Basic)
  27. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Int32, Basic)
  28. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, UInt64, Basic)
  29. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Int64, Basic)
  30. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Bool, Basic)
  31. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Float, Basic)
  32. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Double, Basic)
  33. //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Enum, Enum)
  34. //%PDDM-DEFINE DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, VALUE_NAME, HELPER)
  35. //%@interface GPB##KEY_NAME##VALUE_NAME##Dictionary () <GPBDictionaryInternalsProtocol> {
  36. //% @package
  37. //% GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  38. //%}
  39. //%EXTRA_DICTIONARY_PRIVATE_INTERFACES_##HELPER()@end
  40. //%
  41. //%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Basic()
  42. // Empty
  43. //%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Object()
  44. //%- (BOOL)isInitialized;
  45. //%- (instancetype)deepCopyWithZone:(NSZone *)zone
  46. //% __attribute__((ns_returns_retained));
  47. //%
  48. //%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Enum()
  49. //%- (NSData *)serializedDataForUnknownValue:(int32_t)value
  50. //% forKey:(GPBGenericValue *)key
  51. //% keyDataType:(GPBDataType)keyDataType;
  52. //%
  53. //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt32)
  54. // This block of code is generated, do not edit it directly.
  55. @interface GPBUInt32UInt32Dictionary () <GPBDictionaryInternalsProtocol> {
  56. @package
  57. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  58. }
  59. @end
  60. @interface GPBUInt32Int32Dictionary () <GPBDictionaryInternalsProtocol> {
  61. @package
  62. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  63. }
  64. @end
  65. @interface GPBUInt32UInt64Dictionary () <GPBDictionaryInternalsProtocol> {
  66. @package
  67. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  68. }
  69. @end
  70. @interface GPBUInt32Int64Dictionary () <GPBDictionaryInternalsProtocol> {
  71. @package
  72. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  73. }
  74. @end
  75. @interface GPBUInt32BoolDictionary () <GPBDictionaryInternalsProtocol> {
  76. @package
  77. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  78. }
  79. @end
  80. @interface GPBUInt32FloatDictionary () <GPBDictionaryInternalsProtocol> {
  81. @package
  82. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  83. }
  84. @end
  85. @interface GPBUInt32DoubleDictionary () <GPBDictionaryInternalsProtocol> {
  86. @package
  87. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  88. }
  89. @end
  90. @interface GPBUInt32EnumDictionary () <GPBDictionaryInternalsProtocol> {
  91. @package
  92. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  93. }
  94. - (NSData *)serializedDataForUnknownValue:(int32_t)value
  95. forKey:(GPBGenericValue *)key
  96. keyDataType:(GPBDataType)keyDataType;
  97. @end
  98. @interface GPBUInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> {
  99. @package
  100. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  101. }
  102. - (BOOL)isInitialized;
  103. - (instancetype)deepCopyWithZone:(NSZone *)zone
  104. __attribute__((ns_returns_retained));
  105. @end
  106. //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Int32)
  107. // This block of code is generated, do not edit it directly.
  108. @interface GPBInt32UInt32Dictionary () <GPBDictionaryInternalsProtocol> {
  109. @package
  110. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  111. }
  112. @end
  113. @interface GPBInt32Int32Dictionary () <GPBDictionaryInternalsProtocol> {
  114. @package
  115. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  116. }
  117. @end
  118. @interface GPBInt32UInt64Dictionary () <GPBDictionaryInternalsProtocol> {
  119. @package
  120. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  121. }
  122. @end
  123. @interface GPBInt32Int64Dictionary () <GPBDictionaryInternalsProtocol> {
  124. @package
  125. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  126. }
  127. @end
  128. @interface GPBInt32BoolDictionary () <GPBDictionaryInternalsProtocol> {
  129. @package
  130. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  131. }
  132. @end
  133. @interface GPBInt32FloatDictionary () <GPBDictionaryInternalsProtocol> {
  134. @package
  135. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  136. }
  137. @end
  138. @interface GPBInt32DoubleDictionary () <GPBDictionaryInternalsProtocol> {
  139. @package
  140. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  141. }
  142. @end
  143. @interface GPBInt32EnumDictionary () <GPBDictionaryInternalsProtocol> {
  144. @package
  145. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  146. }
  147. - (NSData *)serializedDataForUnknownValue:(int32_t)value
  148. forKey:(GPBGenericValue *)key
  149. keyDataType:(GPBDataType)keyDataType;
  150. @end
  151. @interface GPBInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> {
  152. @package
  153. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  154. }
  155. - (BOOL)isInitialized;
  156. - (instancetype)deepCopyWithZone:(NSZone *)zone
  157. __attribute__((ns_returns_retained));
  158. @end
  159. //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt64)
  160. // This block of code is generated, do not edit it directly.
  161. @interface GPBUInt64UInt32Dictionary () <GPBDictionaryInternalsProtocol> {
  162. @package
  163. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  164. }
  165. @end
  166. @interface GPBUInt64Int32Dictionary () <GPBDictionaryInternalsProtocol> {
  167. @package
  168. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  169. }
  170. @end
  171. @interface GPBUInt64UInt64Dictionary () <GPBDictionaryInternalsProtocol> {
  172. @package
  173. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  174. }
  175. @end
  176. @interface GPBUInt64Int64Dictionary () <GPBDictionaryInternalsProtocol> {
  177. @package
  178. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  179. }
  180. @end
  181. @interface GPBUInt64BoolDictionary () <GPBDictionaryInternalsProtocol> {
  182. @package
  183. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  184. }
  185. @end
  186. @interface GPBUInt64FloatDictionary () <GPBDictionaryInternalsProtocol> {
  187. @package
  188. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  189. }
  190. @end
  191. @interface GPBUInt64DoubleDictionary () <GPBDictionaryInternalsProtocol> {
  192. @package
  193. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  194. }
  195. @end
  196. @interface GPBUInt64EnumDictionary () <GPBDictionaryInternalsProtocol> {
  197. @package
  198. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  199. }
  200. - (NSData *)serializedDataForUnknownValue:(int32_t)value
  201. forKey:(GPBGenericValue *)key
  202. keyDataType:(GPBDataType)keyDataType;
  203. @end
  204. @interface GPBUInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> {
  205. @package
  206. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  207. }
  208. - (BOOL)isInitialized;
  209. - (instancetype)deepCopyWithZone:(NSZone *)zone
  210. __attribute__((ns_returns_retained));
  211. @end
  212. //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Int64)
  213. // This block of code is generated, do not edit it directly.
  214. @interface GPBInt64UInt32Dictionary () <GPBDictionaryInternalsProtocol> {
  215. @package
  216. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  217. }
  218. @end
  219. @interface GPBInt64Int32Dictionary () <GPBDictionaryInternalsProtocol> {
  220. @package
  221. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  222. }
  223. @end
  224. @interface GPBInt64UInt64Dictionary () <GPBDictionaryInternalsProtocol> {
  225. @package
  226. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  227. }
  228. @end
  229. @interface GPBInt64Int64Dictionary () <GPBDictionaryInternalsProtocol> {
  230. @package
  231. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  232. }
  233. @end
  234. @interface GPBInt64BoolDictionary () <GPBDictionaryInternalsProtocol> {
  235. @package
  236. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  237. }
  238. @end
  239. @interface GPBInt64FloatDictionary () <GPBDictionaryInternalsProtocol> {
  240. @package
  241. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  242. }
  243. @end
  244. @interface GPBInt64DoubleDictionary () <GPBDictionaryInternalsProtocol> {
  245. @package
  246. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  247. }
  248. @end
  249. @interface GPBInt64EnumDictionary () <GPBDictionaryInternalsProtocol> {
  250. @package
  251. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  252. }
  253. - (NSData *)serializedDataForUnknownValue:(int32_t)value
  254. forKey:(GPBGenericValue *)key
  255. keyDataType:(GPBDataType)keyDataType;
  256. @end
  257. @interface GPBInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> {
  258. @package
  259. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  260. }
  261. - (BOOL)isInitialized;
  262. - (instancetype)deepCopyWithZone:(NSZone *)zone
  263. __attribute__((ns_returns_retained));
  264. @end
  265. //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Bool)
  266. // This block of code is generated, do not edit it directly.
  267. @interface GPBBoolUInt32Dictionary () <GPBDictionaryInternalsProtocol> {
  268. @package
  269. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  270. }
  271. @end
  272. @interface GPBBoolInt32Dictionary () <GPBDictionaryInternalsProtocol> {
  273. @package
  274. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  275. }
  276. @end
  277. @interface GPBBoolUInt64Dictionary () <GPBDictionaryInternalsProtocol> {
  278. @package
  279. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  280. }
  281. @end
  282. @interface GPBBoolInt64Dictionary () <GPBDictionaryInternalsProtocol> {
  283. @package
  284. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  285. }
  286. @end
  287. @interface GPBBoolBoolDictionary () <GPBDictionaryInternalsProtocol> {
  288. @package
  289. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  290. }
  291. @end
  292. @interface GPBBoolFloatDictionary () <GPBDictionaryInternalsProtocol> {
  293. @package
  294. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  295. }
  296. @end
  297. @interface GPBBoolDoubleDictionary () <GPBDictionaryInternalsProtocol> {
  298. @package
  299. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  300. }
  301. @end
  302. @interface GPBBoolEnumDictionary () <GPBDictionaryInternalsProtocol> {
  303. @package
  304. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  305. }
  306. - (NSData *)serializedDataForUnknownValue:(int32_t)value
  307. forKey:(GPBGenericValue *)key
  308. keyDataType:(GPBDataType)keyDataType;
  309. @end
  310. @interface GPBBoolObjectDictionary () <GPBDictionaryInternalsProtocol> {
  311. @package
  312. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  313. }
  314. - (BOOL)isInitialized;
  315. - (instancetype)deepCopyWithZone:(NSZone *)zone
  316. __attribute__((ns_returns_retained));
  317. @end
  318. //%PDDM-EXPAND DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(String)
  319. // This block of code is generated, do not edit it directly.
  320. @interface GPBStringUInt32Dictionary () <GPBDictionaryInternalsProtocol> {
  321. @package
  322. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  323. }
  324. @end
  325. @interface GPBStringInt32Dictionary () <GPBDictionaryInternalsProtocol> {
  326. @package
  327. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  328. }
  329. @end
  330. @interface GPBStringUInt64Dictionary () <GPBDictionaryInternalsProtocol> {
  331. @package
  332. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  333. }
  334. @end
  335. @interface GPBStringInt64Dictionary () <GPBDictionaryInternalsProtocol> {
  336. @package
  337. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  338. }
  339. @end
  340. @interface GPBStringBoolDictionary () <GPBDictionaryInternalsProtocol> {
  341. @package
  342. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  343. }
  344. @end
  345. @interface GPBStringFloatDictionary () <GPBDictionaryInternalsProtocol> {
  346. @package
  347. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  348. }
  349. @end
  350. @interface GPBStringDoubleDictionary () <GPBDictionaryInternalsProtocol> {
  351. @package
  352. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  353. }
  354. @end
  355. @interface GPBStringEnumDictionary () <GPBDictionaryInternalsProtocol> {
  356. @package
  357. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  358. }
  359. - (NSData *)serializedDataForUnknownValue:(int32_t)value
  360. forKey:(GPBGenericValue *)key
  361. keyDataType:(GPBDataType)keyDataType;
  362. @end
  363. //%PDDM-EXPAND-END (6 expansions)
  364. // clang-format on
  365. #pragma mark - NSDictionary Subclass
  366. @interface GPBAutocreatedDictionary : NSMutableDictionary {
  367. @package
  368. GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator;
  369. }
  370. @end
  371. #pragma mark - Helpers
  372. CF_EXTERN_C_BEGIN
  373. // Helper to compute size when an NSDictionary is used for the map instead
  374. // of a custom type.
  375. size_t GPBDictionaryComputeSizeInternalHelper(NSDictionary *dict, GPBFieldDescriptor *field);
  376. // Helper to write out when an NSDictionary is used for the map instead
  377. // of a custom type.
  378. void GPBDictionaryWriteToStreamInternalHelper(GPBCodedOutputStream *outputStream,
  379. NSDictionary *dict, GPBFieldDescriptor *field);
  380. // Helper to check message initialization when an NSDictionary is used for
  381. // the map instead of a custom type.
  382. BOOL GPBDictionaryIsInitializedInternalHelper(NSDictionary *dict, GPBFieldDescriptor *field);
  383. // Helper to read a map instead.
  384. void GPBDictionaryReadEntry(id mapDictionary, GPBCodedInputStream *stream,
  385. id<GPBExtensionRegistry> registry, GPBFieldDescriptor *field,
  386. GPBMessage *parentMessage);
  387. CF_EXTERN_C_END