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 86 @interface GPBUInt32UInt32Dictionary () <GPBDictionaryInternalsProtocol> { 87 @package 88 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 89 } 90 @end 91 92 @interface GPBUInt32Int32Dictionary () <GPBDictionaryInternalsProtocol> { 93 @package 94 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 95 } 96 @end 97 98 @interface GPBUInt32UInt64Dictionary () <GPBDictionaryInternalsProtocol> { 99 @package 100 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 101 } 102 @end 103 104 @interface GPBUInt32Int64Dictionary () <GPBDictionaryInternalsProtocol> { 105 @package 106 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 107 } 108 @end 109 110 @interface GPBUInt32BoolDictionary () <GPBDictionaryInternalsProtocol> { 111 @package 112 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 113 } 114 @end 115 116 @interface GPBUInt32FloatDictionary () <GPBDictionaryInternalsProtocol> { 117 @package 118 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 119 } 120 @end 121 122 @interface GPBUInt32DoubleDictionary () <GPBDictionaryInternalsProtocol> { 123 @package 124 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 125 } 126 @end 127 128 @interface GPBUInt32EnumDictionary () <GPBDictionaryInternalsProtocol> { 129 @package 130 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 131 } 132 - (NSData *)serializedDataForUnknownValue:(int32_t)value 133 forKey:(GPBGenericValue *)key 134 keyDataType:(GPBDataType)keyDataType; 135 @end 136 137 @interface GPBUInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> { 138 @package 139 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 140 } 141 - (BOOL)isInitialized; 142 - (instancetype)deepCopyWithZone:(NSZone *)zone 143 __attribute__((ns_returns_retained)); 144 @end 145 146 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Int32) 147 // This block of code is generated, do not edit it directly. 148 149 @interface GPBInt32UInt32Dictionary () <GPBDictionaryInternalsProtocol> { 150 @package 151 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 152 } 153 @end 154 155 @interface GPBInt32Int32Dictionary () <GPBDictionaryInternalsProtocol> { 156 @package 157 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 158 } 159 @end 160 161 @interface GPBInt32UInt64Dictionary () <GPBDictionaryInternalsProtocol> { 162 @package 163 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 164 } 165 @end 166 167 @interface GPBInt32Int64Dictionary () <GPBDictionaryInternalsProtocol> { 168 @package 169 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 170 } 171 @end 172 173 @interface GPBInt32BoolDictionary () <GPBDictionaryInternalsProtocol> { 174 @package 175 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 176 } 177 @end 178 179 @interface GPBInt32FloatDictionary () <GPBDictionaryInternalsProtocol> { 180 @package 181 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 182 } 183 @end 184 185 @interface GPBInt32DoubleDictionary () <GPBDictionaryInternalsProtocol> { 186 @package 187 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 188 } 189 @end 190 191 @interface GPBInt32EnumDictionary () <GPBDictionaryInternalsProtocol> { 192 @package 193 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 194 } 195 - (NSData *)serializedDataForUnknownValue:(int32_t)value 196 forKey:(GPBGenericValue *)key 197 keyDataType:(GPBDataType)keyDataType; 198 @end 199 200 @interface GPBInt32ObjectDictionary () <GPBDictionaryInternalsProtocol> { 201 @package 202 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 203 } 204 - (BOOL)isInitialized; 205 - (instancetype)deepCopyWithZone:(NSZone *)zone 206 __attribute__((ns_returns_retained)); 207 @end 208 209 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(UInt64) 210 // This block of code is generated, do not edit it directly. 211 212 @interface GPBUInt64UInt32Dictionary () <GPBDictionaryInternalsProtocol> { 213 @package 214 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 215 } 216 @end 217 218 @interface GPBUInt64Int32Dictionary () <GPBDictionaryInternalsProtocol> { 219 @package 220 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 221 } 222 @end 223 224 @interface GPBUInt64UInt64Dictionary () <GPBDictionaryInternalsProtocol> { 225 @package 226 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 227 } 228 @end 229 230 @interface GPBUInt64Int64Dictionary () <GPBDictionaryInternalsProtocol> { 231 @package 232 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 233 } 234 @end 235 236 @interface GPBUInt64BoolDictionary () <GPBDictionaryInternalsProtocol> { 237 @package 238 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 239 } 240 @end 241 242 @interface GPBUInt64FloatDictionary () <GPBDictionaryInternalsProtocol> { 243 @package 244 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 245 } 246 @end 247 248 @interface GPBUInt64DoubleDictionary () <GPBDictionaryInternalsProtocol> { 249 @package 250 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 251 } 252 @end 253 254 @interface GPBUInt64EnumDictionary () <GPBDictionaryInternalsProtocol> { 255 @package 256 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 257 } 258 - (NSData *)serializedDataForUnknownValue:(int32_t)value 259 forKey:(GPBGenericValue *)key 260 keyDataType:(GPBDataType)keyDataType; 261 @end 262 263 @interface GPBUInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> { 264 @package 265 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 266 } 267 - (BOOL)isInitialized; 268 - (instancetype)deepCopyWithZone:(NSZone *)zone 269 __attribute__((ns_returns_retained)); 270 @end 271 272 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Int64) 273 // This block of code is generated, do not edit it directly. 274 275 @interface GPBInt64UInt32Dictionary () <GPBDictionaryInternalsProtocol> { 276 @package 277 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 278 } 279 @end 280 281 @interface GPBInt64Int32Dictionary () <GPBDictionaryInternalsProtocol> { 282 @package 283 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 284 } 285 @end 286 287 @interface GPBInt64UInt64Dictionary () <GPBDictionaryInternalsProtocol> { 288 @package 289 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 290 } 291 @end 292 293 @interface GPBInt64Int64Dictionary () <GPBDictionaryInternalsProtocol> { 294 @package 295 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 296 } 297 @end 298 299 @interface GPBInt64BoolDictionary () <GPBDictionaryInternalsProtocol> { 300 @package 301 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 302 } 303 @end 304 305 @interface GPBInt64FloatDictionary () <GPBDictionaryInternalsProtocol> { 306 @package 307 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 308 } 309 @end 310 311 @interface GPBInt64DoubleDictionary () <GPBDictionaryInternalsProtocol> { 312 @package 313 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 314 } 315 @end 316 317 @interface GPBInt64EnumDictionary () <GPBDictionaryInternalsProtocol> { 318 @package 319 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 320 } 321 - (NSData *)serializedDataForUnknownValue:(int32_t)value 322 forKey:(GPBGenericValue *)key 323 keyDataType:(GPBDataType)keyDataType; 324 @end 325 326 @interface GPBInt64ObjectDictionary () <GPBDictionaryInternalsProtocol> { 327 @package 328 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 329 } 330 - (BOOL)isInitialized; 331 - (instancetype)deepCopyWithZone:(NSZone *)zone 332 __attribute__((ns_returns_retained)); 333 @end 334 335 //%PDDM-EXPAND DICTIONARY_PRIV_INTERFACES_FOR_POD_KEY(Bool) 336 // This block of code is generated, do not edit it directly. 337 338 @interface GPBBoolUInt32Dictionary () <GPBDictionaryInternalsProtocol> { 339 @package 340 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 341 } 342 @end 343 344 @interface GPBBoolInt32Dictionary () <GPBDictionaryInternalsProtocol> { 345 @package 346 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 347 } 348 @end 349 350 @interface GPBBoolUInt64Dictionary () <GPBDictionaryInternalsProtocol> { 351 @package 352 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 353 } 354 @end 355 356 @interface GPBBoolInt64Dictionary () <GPBDictionaryInternalsProtocol> { 357 @package 358 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 359 } 360 @end 361 362 @interface GPBBoolBoolDictionary () <GPBDictionaryInternalsProtocol> { 363 @package 364 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 365 } 366 @end 367 368 @interface GPBBoolFloatDictionary () <GPBDictionaryInternalsProtocol> { 369 @package 370 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 371 } 372 @end 373 374 @interface GPBBoolDoubleDictionary () <GPBDictionaryInternalsProtocol> { 375 @package 376 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 377 } 378 @end 379 380 @interface GPBBoolEnumDictionary () <GPBDictionaryInternalsProtocol> { 381 @package 382 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 383 } 384 - (NSData *)serializedDataForUnknownValue:(int32_t)value 385 forKey:(GPBGenericValue *)key 386 keyDataType:(GPBDataType)keyDataType; 387 @end 388 389 @interface GPBBoolObjectDictionary () <GPBDictionaryInternalsProtocol> { 390 @package 391 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 392 } 393 - (BOOL)isInitialized; 394 - (instancetype)deepCopyWithZone:(NSZone *)zone 395 __attribute__((ns_returns_retained)); 396 @end 397 398 //%PDDM-EXPAND DICTIONARY_POD_PRIV_INTERFACES_FOR_KEY(String) 399 // This block of code is generated, do not edit it directly. 400 401 @interface GPBStringUInt32Dictionary () <GPBDictionaryInternalsProtocol> { 402 @package 403 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 404 } 405 @end 406 407 @interface GPBStringInt32Dictionary () <GPBDictionaryInternalsProtocol> { 408 @package 409 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 410 } 411 @end 412 413 @interface GPBStringUInt64Dictionary () <GPBDictionaryInternalsProtocol> { 414 @package 415 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 416 } 417 @end 418 419 @interface GPBStringInt64Dictionary () <GPBDictionaryInternalsProtocol> { 420 @package 421 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 422 } 423 @end 424 425 @interface GPBStringBoolDictionary () <GPBDictionaryInternalsProtocol> { 426 @package 427 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 428 } 429 @end 430 431 @interface GPBStringFloatDictionary () <GPBDictionaryInternalsProtocol> { 432 @package 433 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 434 } 435 @end 436 437 @interface GPBStringDoubleDictionary () <GPBDictionaryInternalsProtocol> { 438 @package 439 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 440 } 441 @end 442 443 @interface GPBStringEnumDictionary () <GPBDictionaryInternalsProtocol> { 444 @package 445 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 446 } 447 - (NSData *)serializedDataForUnknownValue:(int32_t)value 448 forKey:(GPBGenericValue *)key 449 keyDataType:(GPBDataType)keyDataType; 450 @end 451 452 //%PDDM-EXPAND-END (6 expansions) 453 454 #pragma mark - NSDictionary Subclass 455 456 @interface GPBAutocreatedDictionary : NSMutableDictionary { 457 @package 458 GPB_UNSAFE_UNRETAINED GPBMessage *_autocreator; 459 } 460 @end 461 462 #pragma mark - Helpers 463 464 CF_EXTERN_C_BEGIN 465 466 // Helper to compute size when an NSDictionary is used for the map instead 467 // of a custom type. 468 size_t GPBDictionaryComputeSizeInternalHelper(NSDictionary *dict, 469 GPBFieldDescriptor *field); 470 471 // Helper to write out when an NSDictionary is used for the map instead 472 // of a custom type. 473 void GPBDictionaryWriteToStreamInternalHelper( 474 GPBCodedOutputStream *outputStream, NSDictionary *dict, 475 GPBFieldDescriptor *field); 476 477 // Helper to check message initialization when an NSDictionary is used for 478 // the map instead of a custom type. 479 BOOL GPBDictionaryIsInitializedInternalHelper(NSDictionary *dict, 480 GPBFieldDescriptor *field); 481 482 // Helper to read a map instead. 483 void GPBDictionaryReadEntry(id mapDictionary, GPBCodedInputStream *stream, 484 GPBExtensionRegistry *registry, 485 GPBFieldDescriptor *field, 486 GPBMessage *parentMessage); 487 488 CF_EXTERN_C_END 489