From d846b0b059b4d867536b98aa29475a387aa09114 Mon Sep 17 00:00:00 2001 From: Thomas Van Lenten Date: Mon, 8 Jun 2015 16:24:57 -0400 Subject: Beta quality drop of Objective C Support. - Add more to the ObjC dir readme. - Merge the ExtensionField and ExtensionDescriptor to reduce overhead. - Fix an initialization race. - Clean up the Xcode schemes. - Remove the class/enum filter. - Remove some forced inline that were bloating things without proof of performance wins. - Rename some internal types to avoid conflicts with the well know types protos. - Drop the use of ApplyFunctions to the compiler/optimizer can do what it wants. - Better document some possible future improvements. - Add missing support for parsing repeated primitive fields in packed or unpacked forms. - Improve -hash. - Add *Count for repeated and map<> fields to avoid auto create when checking for them being set. --- objectivec/GPBExtensionRegistry.m | 32 +++++++++++++++++--------------- 1 file changed, 17 insertions(+), 15 deletions(-) (limited to 'objectivec/GPBExtensionRegistry.m') diff --git a/objectivec/GPBExtensionRegistry.m b/objectivec/GPBExtensionRegistry.m index 4f234f55..df61a17b 100644 --- a/objectivec/GPBExtensionRegistry.m +++ b/objectivec/GPBExtensionRegistry.m @@ -32,7 +32,6 @@ #import "GPBBootstrap.h" #import "GPBDescriptor.h" -#import "GPBExtensionField.h" @implementation GPBExtensionRegistry { // TODO(dmaclach): Reimplement with CFDictionaries that don't use @@ -60,31 +59,34 @@ return result; } -- (NSMutableDictionary *)extensionMapForContainingType: - (GPBDescriptor *)containingType { +- (NSMutableDictionary *)extensionMapForContainingMessageClass: + (Class)containingMessageClass { NSMutableDictionary *extensionMap = - [mutableClassMap_ objectForKey:containingType]; + [mutableClassMap_ objectForKey:containingMessageClass]; if (extensionMap == nil) { extensionMap = [NSMutableDictionary dictionary]; - [mutableClassMap_ setObject:extensionMap forKey:containingType]; + [mutableClassMap_ setObject:extensionMap + forKey:(id)containingMessageClass]; } return extensionMap; } -- (void)addExtension:(GPBExtensionField *)extension { +- (void)addExtension:(GPBExtensionDescriptor *)extension { if (extension == nil) { return; } - GPBDescriptor *containingType = [extension containingType]; + Class containingMessageClass = extension.containingMessageClass; NSMutableDictionary *extensionMap = - [self extensionMapForContainingType:containingType]; - [extensionMap setObject:extension forKey:@([extension fieldNumber])]; + [self extensionMapForContainingMessageClass:containingMessageClass]; + [extensionMap setObject:extension forKey:@(extension.fieldNumber)]; } -- (GPBExtensionField *)getExtension:(GPBDescriptor *)containingType - fieldNumber:(NSInteger)fieldNumber { - NSDictionary *extensionMap = [mutableClassMap_ objectForKey:containingType]; +- (GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor + fieldNumber:(NSInteger)fieldNumber { + Class messageClass = descriptor.messageClass; + NSDictionary *extensionMap = + [mutableClassMap_ objectForKey:messageClass]; return [extensionMap objectForKey:@(fieldNumber)]; } @@ -94,11 +96,11 @@ return; } NSMutableDictionary *otherClassMap = registry->mutableClassMap_; - for (GPBDescriptor *containingType in otherClassMap) { + for (Class containingMessageClass in otherClassMap) { NSMutableDictionary *extensionMap = - [self extensionMapForContainingType:containingType]; + [self extensionMapForContainingMessageClass:containingMessageClass]; NSMutableDictionary *otherExtensionMap = - [registry extensionMapForContainingType:containingType]; + [registry extensionMapForContainingMessageClass:containingMessageClass]; [extensionMap addEntriesFromDictionary:otherExtensionMap]; } } -- cgit v1.2.3