Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(288)

Unified Diff: third_party/protobuf/objectivec/GPBExtensionRegistry.m

Issue 2600753002: Reverts third_party/protobuf: Update to HEAD (f52e188fe4) (Closed)
Patch Set: Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/protobuf/objectivec/GPBExtensionRegistry.m
diff --git a/third_party/protobuf/objectivec/GPBExtensionRegistry.m b/third_party/protobuf/objectivec/GPBExtensionRegistry.m
index 65534b67af1692689cea292e65dc5f8ce577764a..df61a17b187ab1d21894e0da8e4b33939491e935 100644
--- a/third_party/protobuf/objectivec/GPBExtensionRegistry.m
+++ b/third_party/protobuf/objectivec/GPBExtensionRegistry.m
@@ -34,6 +34,8 @@
#import "GPBDescriptor.h"
@implementation GPBExtensionRegistry {
+ // TODO(dmaclach): Reimplement with CFDictionaries that don't use
+ // objects as keys.
NSMutableDictionary *mutableClassMap_;
}
@@ -49,12 +51,6 @@
[super dealloc];
}
-// Direct access is use for speed, to avoid even internally declaring things
-// read/write, etc. The warning is enabled in the project to ensure code calling
-// protos can turn on -Wdirect-ivar-access without issues.
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wdirect-ivar-access"
-
- (instancetype)copyWithZone:(NSZone *)zone {
GPBExtensionRegistry *result = [[[self class] allocWithZone:zone] init];
if (result && mutableClassMap_.count) {
@@ -63,16 +59,13 @@
return result;
}
-- (CFMutableDictionaryRef)extensionMapForContainingMessageClass:
+- (NSMutableDictionary *)extensionMapForContainingMessageClass:
(Class)containingMessageClass {
- CFMutableDictionaryRef extensionMap = (CFMutableDictionaryRef)
+ NSMutableDictionary *extensionMap =
[mutableClassMap_ objectForKey:containingMessageClass];
if (extensionMap == nil) {
- // Use a custom dictionary here because the keys are numbers and conversion
- // back and forth from NSNumber isn't worth the cost.
- extensionMap = CFDictionaryCreateMutable(kCFAllocatorDefault, 0, NULL,
- &kCFTypeDictionaryValueCallBacks);
- [mutableClassMap_ setObject:(id)extensionMap
+ extensionMap = [NSMutableDictionary dictionary];
+ [mutableClassMap_ setObject:extensionMap
forKey:(id<NSCopying>)containingMessageClass];
}
return extensionMap;
@@ -84,28 +77,17 @@
}
Class containingMessageClass = extension.containingMessageClass;
- CFMutableDictionaryRef extensionMap =
+ NSMutableDictionary *extensionMap =
[self extensionMapForContainingMessageClass:containingMessageClass];
- ssize_t key = extension.fieldNumber;
- CFDictionarySetValue(extensionMap, (const void *)key, extension);
+ [extensionMap setObject:extension forKey:@(extension.fieldNumber)];
}
- (GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor
fieldNumber:(NSInteger)fieldNumber {
Class messageClass = descriptor.messageClass;
- CFMutableDictionaryRef extensionMap = (CFMutableDictionaryRef)
+ NSDictionary *extensionMap =
[mutableClassMap_ objectForKey:messageClass];
- ssize_t key = fieldNumber;
- GPBExtensionDescriptor *result =
- (extensionMap
- ? CFDictionaryGetValue(extensionMap, (const void *)key)
- : nil);
- return result;
-}
-
-static void CopyKeyValue(const void *key, const void *value, void *context) {
- CFMutableDictionaryRef extensionMap = (CFMutableDictionaryRef)context;
- CFDictionarySetValue(extensionMap, key, value);
+ return [extensionMap objectForKey:@(fieldNumber)];
}
- (void)addExtensions:(GPBExtensionRegistry *)registry {
@@ -114,18 +96,13 @@ static void CopyKeyValue(const void *key, const void *value, void *context) {
return;
}
NSMutableDictionary *otherClassMap = registry->mutableClassMap_;
- [otherClassMap enumerateKeysAndObjectsUsingBlock:^(id key, id value, BOOL * stop) {
-#pragma unused(stop)
- Class containingMessageClass = key;
- CFMutableDictionaryRef otherExtensionMap = (CFMutableDictionaryRef)value;
-
- CFMutableDictionaryRef extensionMap =
+ for (Class containingMessageClass in otherClassMap) {
+ NSMutableDictionary *extensionMap =
[self extensionMapForContainingMessageClass:containingMessageClass];
-
- CFDictionaryApplyFunction(otherExtensionMap, CopyKeyValue, extensionMap);
- }];
+ NSMutableDictionary *otherExtensionMap =
+ [registry extensionMapForContainingMessageClass:containingMessageClass];
+ [extensionMap addEntriesFromDictionary:otherExtensionMap];
+ }
}
-#pragma clang diagnostic pop
-
@end
« no previous file with comments | « third_party/protobuf/objectivec/GPBExtensionRegistry.h ('k') | third_party/protobuf/objectivec/GPBMessage.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698