Home | History | Annotate | Download | only in objectivec
      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