aboutsummaryrefslogtreecommitdiff
path: root/objectivec/GPBExtensionRegistry.m
diff options
context:
space:
mode:
authorThomas Van Lenten <thomasvl@google.com>2015-06-08 16:24:57 -0400
committerThomas Van Lenten <thomasvl@google.com>2015-06-08 17:17:22 -0400
commitd846b0b059b4d867536b98aa29475a387aa09114 (patch)
tree25ebf99cd0462281add17fc94bdf185e5fd9096c /objectivec/GPBExtensionRegistry.m
parent3f9be70d067fb03cd03f99522473dee265b84ddb (diff)
downloadprotobuf-d846b0b059b4d867536b98aa29475a387aa09114.tar.gz
protobuf-d846b0b059b4d867536b98aa29475a387aa09114.tar.bz2
protobuf-d846b0b059b4d867536b98aa29475a387aa09114.zip
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.
Diffstat (limited to 'objectivec/GPBExtensionRegistry.m')
-rw-r--r--objectivec/GPBExtensionRegistry.m32
1 files changed, 17 insertions, 15 deletions
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<NSCopying>)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];
}
}