1 // Protocol Buffers - Google's data interchange format 2 // Copyright 2008 Google Inc. All rights reserved. 3 // https://developers.google.com/protocol-buffers/ 4 // 5 // Redistribution and use in source and binary forms, with or without 6 // modification, are permitted provided that the following conditions are 7 // met: 8 // 9 // * Redistributions of source code must retain the above copyright 10 // notice, this list of conditions and the following disclaimer. 11 // * Redistributions in binary form must reproduce the above 12 // copyright notice, this list of conditions and the following disclaimer 13 // in the documentation and/or other materials provided with the 14 // distribution. 15 // * Neither the name of Google Inc. nor the names of its 16 // contributors may be used to endorse or promote products derived from 17 // this software without specific prior written permission. 18 // 19 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 20 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 21 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 22 // A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 23 // OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 24 // SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 25 // LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 26 // DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 27 // THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 28 // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 31 #import <Foundation/Foundation.h> 32 33 #import "GPBDictionary.h" 34 35 @class GPBCodedInputStream; 36 @class GPBCodedOutputStream; 37 @class GPBExtensionRegistry; 38 @class GPBFieldDescriptor; 39 40 @protocol GPBDictionaryInternalsProtocol 41 - (size_t)computeSerializedSizeAsField:(GPBFieldDescriptor *)field; 42 - (void)writeToCodedOutputStream:(GPBCodedOutputStream *)outputStream 43 asField:(GPBFieldDescriptor *)field; 44 - (void)setGPBGenericValue:(GPBGenericValue *)value 45 forGPBGenericValueKey:(GPBGenericValue *)key; 46 - (void)enumerateForTextFormat:(void (^)(id keyObj, id valueObj))block; 47 @end 48 49 //%PDDM-DEFINE DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(KEY_NAME) 50 //%DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(KEY_NAME) 51 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Object, Object) 52 //%PDDM-DEFINE DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(KEY_NAME) 53 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, UInt32, Basic) 54 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Int32, Basic) 55 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, UInt64, Basic) 56 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Int64, Basic) 57 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Bool, Basic) 58 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Float, Basic) 59 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Double, Basic) 60 //%DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, Enum, Enum) 61 62 //%PDDM-DEFINE DICTIONARY_PRIVATE_INTERFACES(KEY_NAME, VALUE_NAME, HELPER) 63 //%@interface GPB##KEY_NAME##VALUE_NAME##Dictionary () <GPBDictionaryInternalsProtocol> { 64 //% @package 65 //% GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 66 //%} 67 //%EXTRA_DICTIONARY_PRIVATE_INTERFACES_##HELPER()@end 68 //% 69 70 //%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Basic() 71 // Empty 72 //%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Object() 73 //%- (BOOL)isInitialized; 74 //%- (instancetype)deepCopyWithZone:(NSZone *)zone 75 //% __attribute__((ns_returns_retained)); 76 //% 77 //%PDDM-DEFINE EXTRA_DICTIONARY_PRIVATE_INTERFACES_Enum() 78 //%- (NSData *)serializedDataForUnknownValue:(int32_t)value 79 //% forKey:(GPBGenericValue *)key 80 //% keyDataType:(GPBDataType)keyDataType; 81 //% 82 83 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt32) 84 // This block of code is generated, do not edit it directly. 85 // clang-format off 86 87 @interface GPBUInt32UInt32Dictionary () <GPBDictionaryInternalsProtocol> { 88 @package 89 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 90 } 91 @end 92 93 @interface GPBUInt32Int32Dictionary () <GPBDictionaryInternalsProtocol> { 94 @package 95 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 96 } 97 @end 98 99 @interface GPBUInt32UInt64Dictionary () <GPBDictionaryInternalsProtocol> { 100 @package 101 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 102 } 103 @end 104 105 @interface GPBUInt32Int64Dictionary () <GPBDictionaryInternalsProtocol> { 106 @package 107 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 108 } 109 @end 110 111 @interface GPBUInt32BoolDictionary () <GPBDictionaryInternalsProtocol> { 112 @package 113 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 114 } 115 @end 116 117 @interface GPBUInt32FloatDictionary () <GPBDictionaryInternalsProtocol> { 118 @package 119 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 120 } 121 @end 122 123 @interface GPBUInt32DoubleDictionary () <GPBDictionaryInternalsProtocol> { 124 @package 125 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 126 } 127 @end 128 129 @interface GPBUInt32EnumDictionary () <GPBDictionaryInternalsProtocol> { 130 @package 131 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 132 } 133 - (NSData *)serializedDataForUnknownValue:(int32_t)value 134 forKey:(GPBGenericValue *)key 135 keyDataType:(GPBDataType)keyDataType; 136 @end 137 138 @interface GPBUInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> { 139 @package 140 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 141 } 142 - (BOOL)isInitialized; 143 - (instancetype)deepCopyWithZone:(NSZone *)zone 144 __attribute__((ns_returns_retained)); 145 @end 146 147 // clang-format on 148 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Int32) 149 // This block of code is generated, do not edit it directly. 150 // clang-format off 151 152 @interface GPBInt32UInt32Dictionary () <GPBDictionaryInternalsProtocol> { 153 @package 154 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 155 } 156 @end 157 158 @interface GPBInt32Int32Dictionary () <GPBDictionaryInternalsProtocol> { 159 @package 160 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 161 } 162 @end 163 164 @interface GPBInt32UInt64Dictionary () <GPBDictionaryInternalsProtocol> { 165 @package 166 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 167 } 168 @end 169 170 @interface GPBInt32Int64Dictionary () <GPBDictionaryInternalsProtocol> { 171 @package 172 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 173 } 174 @end 175 176 @interface GPBInt32BoolDictionary () <GPBDictionaryInternalsProtocol> { 177 @package 178 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 179 } 180 @end 181 182 @interface GPBInt32FloatDictionary () <GPBDictionaryInternalsProtocol> { 183 @package 184 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 185 } 186 @end 187 188 @interface GPBInt32DoubleDictionary () <GPBDictionaryInternalsProtocol> { 189 @package 190 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 191 } 192 @end 193 194 @interface GPBInt32EnumDictionary () <GPBDictionaryInternalsProtocol> { 195 @package 196 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 197 } 198 - (NSData *)serializedDataForUnknownValue:(int32_t)value 199 forKey:(GPBGenericValue *)key 200 keyDataType:(GPBDataType)keyDataType; 201 @end 202 203 @interface GPBInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> { 204 @package 205 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 206 } 207 - (BOOL)isInitialized; 208 - (instancetype)deepCopyWithZone:(NSZone *)zone 209 __attribute__((ns_returns_retained)); 210 @end 211 212 // clang-format on 213 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt64) 214 // This block of code is generated, do not edit it directly. 215 // clang-format off 216 217 @interface GPBUInt64UInt32Dictionary () <GPBDictionaryInternalsProtocol> { 218 @package 219 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 220 } 221 @end 222 223 @interface GPBUInt64Int32Dictionary () <GPBDictionaryInternalsProtocol> { 224 @package 225 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 226 } 227 @end 228 229 @interface GPBUInt64UInt64Dictionary () <GPBDictionaryInternalsProtocol> { 230 @package 231 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 232 } 233 @end 234 235 @interface GPBUInt64Int64Dictionary () <GPBDictionaryInternalsProtocol> { 236 @package 237 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 238 } 239 @end 240 241 @interface GPBUInt64BoolDictionary () <GPBDictionaryInternalsProtocol> { 242 @package 243 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 244 } 245 @end 246 247 @interface GPBUInt64FloatDictionary () <GPBDictionaryInternalsProtocol> { 248 @package 249 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 250 } 251 @end 252 253 @interface GPBUInt64DoubleDictionary () <GPBDictionaryInternalsProtocol> { 254 @package 255 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 256 } 257 @end 258 259 @interface GPBUInt64EnumDictionary () <GPBDictionaryInternalsProtocol> { 260 @package 261 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 262 } 263 - (NSData *)serializedDataForUnknownValue:(int32_t)value 264 forKey:(GPBGenericValue *)key 265 keyDataType:(GPBDataType)keyDataType; 266 @end 267 268 @interface GPBUInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> { 269 @package 270 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 271 } 272 - (BOOL)isInitialized; 273 - (instancetype)deepCopyWithZone:(NSZone *)zone 274 __attribute__((ns_returns_retained)); 275 @end 276 277 // clang-format on 278 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Int64) 279 // This block of code is generated, do not edit it directly. 280 // clang-format off 281 282 @interface GPBInt64UInt32Dictionary () <GPBDictionaryInternalsProtocol> { 283 @package 284 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 285 } 286 @end 287 288 @interface GPBInt64Int32Dictionary () <GPBDictionaryInternalsProtocol> { 289 @package 290 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 291 } 292 @end 293 294 @interface GPBInt64UInt64Dictionary () <GPBDictionaryInternalsProtocol> { 295 @package 296 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 297 } 298 @end 299 300 @interface GPBInt64Int64Dictionary () <GPBDictionaryInternalsProtocol> { 301 @package 302 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 303 } 304 @end 305 306 @interface GPBInt64BoolDictionary () <GPBDictionaryInternalsProtocol> { 307 @package 308 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 309 } 310 @end 311 312 @interface GPBInt64FloatDictionary () <GPBDictionaryInternalsProtocol> { 313 @package 314 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 315 } 316 @end 317 318 @interface GPBInt64DoubleDictionary () <GPBDictionaryInternalsProtocol> { 319 @package 320 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 321 } 322 @end 323 324 @interface GPBInt64EnumDictionary () <GPBDictionaryInternalsProtocol> { 325 @package 326 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 327 } 328 - (NSData *)serializedDataForUnknownValue:(int32_t)value 329 forKey:(GPBGenericValue *)key 330 keyDataType:(GPBDataType)keyDataType; 331 @end 332 333 @interface GPBInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> { 334 @package 335 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 336 } 337 - (BOOL)isInitialized; 338 - (instancetype)deepCopyWithZone:(NSZone *)zone 339 __attribute__((ns_returns_retained)); 340 @end 341 342 // clang-format on 343 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Bool) 344 // This block of code is generated, do not edit it directly. 345 // clang-format off 346 347 @interface GPBBoolUInt32Dictionary () <GPBDictionaryInternalsProtocol> { 348 @package 349 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 350 } 351 @end 352 353 @interface GPBBoolInt32Dictionary () <GPBDictionaryInternalsProtocol> { 354 @package 355 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 356 } 357 @end 358 359 @interface GPBBoolUInt64Dictionary () <GPBDictionaryInternalsProtocol> { 360 @package 361 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 362 } 363 @end 364 365 @interface GPBBoolInt64Dictionary () <GPBDictionaryInternalsProtocol> { 366 @package 367 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 368 } 369 @end 370 371 @interface GPBBoolBoolDictionary () <GPBDictionaryInternalsProtocol> { 372 @package 373 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 374 } 375 @end 376 377 @interface GPBBoolFloatDictionary () <GPBDictionaryInternalsProtocol> { 378 @package 379 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 380 } 381 @end 382 383 @interface GPBBoolDoubleDictionary () <GPBDictionaryInternalsProtocol> { 384 @package 385 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 386 } 387 @end 388 389 @interface GPBBoolEnumDictionary () <GPBDictionaryInternalsProtocol> { 390 @package 391 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 392 } 393 - (NSData *)serializedDataForUnknownValue:(int32_t)value 394 forKey:(GPBGenericValue *)key 395 keyDataType:(GPBDataType)keyDataType; 396 @end 397 398 @interface GPBBoolObjectDictionary () <GPBDictionaryInternalsProtocol> { 399 @package 400 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 401 } 402 - (BOOL)isInitialized; 403 - (instancetype)deepCopyWithZone:(NSZone *)zone 404 __attribute__((ns_returns_retained)); 405 @end 406 407 // clang-format on 408 //%PDDM-EXPAND DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(String) 409 // This block of code is generated, do not edit it directly. 410 // clang-format off 411 412 @interface GPBStringUInt32Dictionary () <GPBDictionaryInternalsProtocol> { 413 @package 414 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 415 } 416 @end 417 418 @interface GPBStringInt32Dictionary () <GPBDictionaryInternalsProtocol> { 419 @package 420 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 421 } 422 @end 423 424 @interface GPBStringUInt64Dictionary () <GPBDictionaryInternalsProtocol> { 425 @package 426 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 427 } 428 @end 429 430 @interface GPBStringInt64Dictionary () <GPBDictionaryInternalsProtocol> { 431 @package 432 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 433 } 434 @end 435 436 @interface GPBStringBoolDictionary () <GPBDictionaryInternalsProtocol> { 437 @package 438 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 439 } 440 @end 441 442 @interface GPBStringFloatDictionary () <GPBDictionaryInternalsProtocol> { 443 @package 444 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 445 } 446 @end 447 448 @interface GPBStringDoubleDictionary () <GPBDictionaryInternalsProtocol> { 449 @package 450 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 451 } 452 @end 453 454 @interface GPBStringEnumDictionary () <GPBDictionaryInternalsProtocol> { 455 @package 456 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 457 } 458 - (NSData *)serializedDataForUnknownValue:(int32_t)value 459 forKey:(GPBGenericValue *)key 460 keyDataType:(GPBDataType)keyDataType; 461 @end 462 463 // clang-format on 464 //%PDDM-EXPAND-END (6 expansions) 465 466 #pragma mark - NSDictionary Subclass 467 468 @interface GPBAutocreatedDictionary : NSMutableDictionary { 469 @package 470 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 471 } 472 @end 473 474 #pragma mark - Helpers 475 476 CF_EXTERN_C_BEGIN 477 478 // Helper to compute size when an NSDictionary is used for the map instead 479 // of a custom type. 480 size_t GPBDictionaryComputeSizeInternalHelper(NSDictionary *dict, 481 GPBFieldDescriptor *field); 482 483 // Helper to write out when an NSDictionary is used for the map instead 484 // of a custom type. 485 void GPBDictionaryWriteToStreamInternalHelper( 486 GPBCodedOutputStream *outputStream, NSDictionary *dict, 487 GPBFieldDescriptor *field); 488 489 // Helper to check message initialization when an NSDictionary is used for 490 // the map instead of a custom type. 491 BOOL GPBDictionaryIsInitializedInternalHelper(NSDictionary *dict, 492 GPBFieldDescriptor *field); 493 494 // Helper to read a map instead. 495 void GPBDictionaryReadEntry(id mapDictionary, GPBCodedInputStream *stream, 496 GPBExtensionRegistry *registry, 497 GPBFieldDescriptor *field, 498 GPBMessage *parentMessage); 499 500 CF_EXTERN_C_END 501