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

Side by Side Diff: third_party/protobuf/objectivec/GPBMessage.m

Issue 2600753002: Reverts third_party/protobuf: Update to HEAD (f52e188fe4) (Closed)
Patch Set: Created 3 years, 12 months 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 unified diff | Download patch
OLDNEW
1 // Protocol Buffers - Google's data interchange format 1 // Protocol Buffers - Google's data interchange format
2 // Copyright 2008 Google Inc. All rights reserved. 2 // Copyright 2008 Google Inc. All rights reserved.
3 // https://developers.google.com/protocol-buffers/ 3 // https://developers.google.com/protocol-buffers/
4 // 4 //
5 // Redistribution and use in source and binary forms, with or without 5 // Redistribution and use in source and binary forms, with or without
6 // modification, are permitted provided that the following conditions are 6 // modification, are permitted provided that the following conditions are
7 // met: 7 // met:
8 // 8 //
9 // * Redistributions of source code must retain the above copyright 9 // * Redistributions of source code must retain the above copyright
10 // notice, this list of conditions and the following disclaimer. 10 // notice, this list of conditions and the following disclaimer.
(...skipping 26 matching lines...) Expand all
37 #import "GPBCodedInputStream_PackagePrivate.h" 37 #import "GPBCodedInputStream_PackagePrivate.h"
38 #import "GPBCodedOutputStream_PackagePrivate.h" 38 #import "GPBCodedOutputStream_PackagePrivate.h"
39 #import "GPBDescriptor_PackagePrivate.h" 39 #import "GPBDescriptor_PackagePrivate.h"
40 #import "GPBDictionary_PackagePrivate.h" 40 #import "GPBDictionary_PackagePrivate.h"
41 #import "GPBExtensionInternals.h" 41 #import "GPBExtensionInternals.h"
42 #import "GPBExtensionRegistry.h" 42 #import "GPBExtensionRegistry.h"
43 #import "GPBRootObject_PackagePrivate.h" 43 #import "GPBRootObject_PackagePrivate.h"
44 #import "GPBUnknownFieldSet_PackagePrivate.h" 44 #import "GPBUnknownFieldSet_PackagePrivate.h"
45 #import "GPBUtilities_PackagePrivate.h" 45 #import "GPBUtilities_PackagePrivate.h"
46 46
47 // Direct access is use for speed, to avoid even internally declaring things
48 // read/write, etc. The warning is enabled in the project to ensure code calling
49 // protos can turn on -Wdirect-ivar-access without issues.
50 #pragma clang diagnostic push
51 #pragma clang diagnostic ignored "-Wdirect-ivar-access"
52
53 NSString *const GPBMessageErrorDomain = 47 NSString *const GPBMessageErrorDomain =
54 GPBNSStringifySymbol(GPBMessageErrorDomain); 48 GPBNSStringifySymbol(GPBMessageErrorDomain);
55 49
56 NSString *const GPBErrorReasonKey = @"Reason"; 50 #ifdef DEBUG
51 NSString *const GPBExceptionMessageKey =
52 GPBNSStringifySymbol(GPBExceptionMessage);
53 #endif // DEBUG
57 54
58 static NSString *const kGPBDataCoderKey = @"GPBData"; 55 static NSString *const kGPBDataCoderKey = @"GPBData";
59 56
60 // 57 //
61 // PLEASE REMEMBER: 58 // PLEASE REMEMBER:
62 // 59 //
63 // This is the base class for *all* messages generated, so any selector defined, 60 // This is the base class for *all* messages generated, so any selector defined,
64 // *public* or *private* could end up colliding with a proto message field. So 61 // *public* or *private* could end up colliding with a proto message field. So
65 // avoid using selectors that could match a property, use C functions to hide 62 // avoid using selectors that could match a property, use C functions to hide
66 // them, etc. 63 // them, etc.
(...skipping 24 matching lines...) Expand all
91 GPBMessage *autocreator) 88 GPBMessage *autocreator)
92 __attribute__((ns_returns_retained)); 89 __attribute__((ns_returns_retained));
93 static id GetOrCreateMapIvarWithField(GPBMessage *self, 90 static id GetOrCreateMapIvarWithField(GPBMessage *self,
94 GPBFieldDescriptor *field, 91 GPBFieldDescriptor *field,
95 GPBFileSyntax syntax); 92 GPBFileSyntax syntax);
96 static id GetMapIvarWithField(GPBMessage *self, GPBFieldDescriptor *field); 93 static id GetMapIvarWithField(GPBMessage *self, GPBFieldDescriptor *field);
97 static NSMutableDictionary *CloneExtensionMap(NSDictionary *extensionMap, 94 static NSMutableDictionary *CloneExtensionMap(NSDictionary *extensionMap,
98 NSZone *zone) 95 NSZone *zone)
99 __attribute__((ns_returns_retained)); 96 __attribute__((ns_returns_retained));
100 97
101 #ifdef DEBUG
102 static NSError *MessageError(NSInteger code, NSDictionary *userInfo) { 98 static NSError *MessageError(NSInteger code, NSDictionary *userInfo) {
103 return [NSError errorWithDomain:GPBMessageErrorDomain 99 return [NSError errorWithDomain:GPBMessageErrorDomain
104 code:code 100 code:code
105 userInfo:userInfo]; 101 userInfo:userInfo];
106 } 102 }
107 #endif
108 103
109 static NSError *ErrorFromException(NSException *exception) { 104 static NSError *MessageErrorWithReason(NSInteger code, NSString *reason) {
110 NSError *error = nil; 105 NSDictionary *userInfo = nil;
106 if ([reason length]) {
107 userInfo = @{ @"Reason" : reason };
108 }
109 return MessageError(code, userInfo);
110 }
111 111
112 if ([exception.name isEqual:GPBCodedInputStreamException]) {
113 NSDictionary *exceptionInfo = exception.userInfo;
114 error = exceptionInfo[GPBCodedInputStreamUnderlyingErrorKey];
115 }
116
117 if (!error) {
118 NSString *reason = exception.reason;
119 NSDictionary *userInfo = nil;
120 if ([reason length]) {
121 userInfo = @{ GPBErrorReasonKey : reason };
122 }
123
124 error = [NSError errorWithDomain:GPBMessageErrorDomain
125 code:GPBMessageErrorCodeOther
126 userInfo:userInfo];
127 }
128 return error;
129 }
130 112
131 static void CheckExtension(GPBMessage *self, 113 static void CheckExtension(GPBMessage *self,
132 GPBExtensionDescriptor *extension) { 114 GPBExtensionDescriptor *extension) {
133 if ([self class] != extension.containingMessageClass) { 115 if ([self class] != extension.containingMessageClass) {
134 [NSException 116 [NSException
135 raise:NSInvalidArgumentException 117 raise:NSInvalidArgumentException
136 format:@"Extension %@ used on wrong class (%@ instead of %@)", 118 format:@"Extension %@ used on wrong class (%@ instead of %@)",
137 extension.singletonName, 119 extension.singletonName,
138 [self class], extension.containingMessageClass]; 120 [self class], extension.containingMessageClass];
139 } 121 }
(...skipping 565 matching lines...) Expand 10 before | Expand all | Expand 10 after
705 } 687 }
706 } 688 }
707 NSCAssert(NO, @"Unknown autocreated %@ for %@.", [dictionary class], self); 689 NSCAssert(NO, @"Unknown autocreated %@ for %@.", [dictionary class], self);
708 } 690 }
709 691
710 void GPBClearMessageAutocreator(GPBMessage *self) { 692 void GPBClearMessageAutocreator(GPBMessage *self) {
711 if ((self == nil) || !self->autocreator_) { 693 if ((self == nil) || !self->autocreator_) {
712 return; 694 return;
713 } 695 }
714 696
715 #if defined(DEBUG) && DEBUG && !defined(NS_BLOCK_ASSERTIONS) 697 #if DEBUG && !defined(NS_BLOCK_ASSERTIONS)
716 // Either the autocreator must have its "has" flag set to YES, or it must be 698 // Either the autocreator must have its "has" flag set to YES, or it must be
717 // NO and not equal to ourselves. 699 // NO and not equal to ourselves.
718 BOOL autocreatorHas = 700 BOOL autocreatorHas =
719 (self->autocreatorField_ 701 (self->autocreatorField_
720 ? GPBGetHasIvarField(self->autocreator_, self->autocreatorField_) 702 ? GPBGetHasIvarField(self->autocreator_, self->autocreatorField_)
721 : [self->autocreator_ hasExtension:self->autocreatorExtension_]); 703 : [self->autocreator_ hasExtension:self->autocreatorExtension_]);
722 GPBMessage *autocreatorFieldValue = 704 GPBMessage *autocreatorFieldValue =
723 (self->autocreatorField_ 705 (self->autocreatorField_
724 ? GPBGetObjectIvarWithFieldNoAutocreate(self->autocreator_, 706 ? GPBGetObjectIvarWithFieldNoAutocreate(self->autocreator_,
725 self->autocreatorField_) 707 self->autocreatorField_)
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
827 @try { 809 @try {
828 [self mergeFromData:data extensionRegistry:extensionRegistry]; 810 [self mergeFromData:data extensionRegistry:extensionRegistry];
829 if (errorPtr) { 811 if (errorPtr) {
830 *errorPtr = nil; 812 *errorPtr = nil;
831 } 813 }
832 } 814 }
833 @catch (NSException *exception) { 815 @catch (NSException *exception) {
834 [self release]; 816 [self release];
835 self = nil; 817 self = nil;
836 if (errorPtr) { 818 if (errorPtr) {
837 *errorPtr = ErrorFromException(exception); 819 *errorPtr = MessageErrorWithReason(GPBMessageErrorCodeMalformedData,
820 exception.reason);
838 } 821 }
839 } 822 }
840 #ifdef DEBUG 823 #ifdef DEBUG
841 if (self && !self.initialized) { 824 if (self && !self.initialized) {
842 [self release]; 825 [self release];
843 self = nil; 826 self = nil;
844 if (errorPtr) { 827 if (errorPtr) {
845 *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil); 828 *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil);
846 } 829 }
847 } 830 }
(...skipping 10 matching lines...) Expand all
858 @try { 841 @try {
859 [self mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] ; 842 [self mergeFromCodedInputStream:input extensionRegistry:extensionRegistry] ;
860 if (errorPtr) { 843 if (errorPtr) {
861 *errorPtr = nil; 844 *errorPtr = nil;
862 } 845 }
863 } 846 }
864 @catch (NSException *exception) { 847 @catch (NSException *exception) {
865 [self release]; 848 [self release];
866 self = nil; 849 self = nil;
867 if (errorPtr) { 850 if (errorPtr) {
868 *errorPtr = ErrorFromException(exception); 851 *errorPtr = MessageErrorWithReason(GPBMessageErrorCodeMalformedData,
852 exception.reason);
869 } 853 }
870 } 854 }
871 #ifdef DEBUG 855 #ifdef DEBUG
872 if (self && !self.initialized) { 856 if (self && !self.initialized) {
873 [self release]; 857 [self release];
874 self = nil; 858 self = nil;
875 if (errorPtr) { 859 if (errorPtr) {
876 *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil); 860 *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil);
877 } 861 }
878 } 862 }
(...skipping 866 matching lines...) Expand 10 before | Expand all | Expand 10 after
1745 dispatch_semaphore_signal(readOnlySemaphore_); 1729 dispatch_semaphore_signal(readOnlySemaphore_);
1746 return value; 1730 return value;
1747 } 1731 }
1748 1732
1749 - (id)getExistingExtension:(GPBExtensionDescriptor *)extension { 1733 - (id)getExistingExtension:(GPBExtensionDescriptor *)extension {
1750 // This is an internal method so we don't need to call CheckExtension(). 1734 // This is an internal method so we don't need to call CheckExtension().
1751 return [extensionMap_ objectForKey:extension]; 1735 return [extensionMap_ objectForKey:extension];
1752 } 1736 }
1753 1737
1754 - (BOOL)hasExtension:(GPBExtensionDescriptor *)extension { 1738 - (BOOL)hasExtension:(GPBExtensionDescriptor *)extension {
1755 #if defined(DEBUG) && DEBUG 1739 #if DEBUG
1756 CheckExtension(self, extension); 1740 CheckExtension(self, extension);
1757 #endif // DEBUG 1741 #endif // DEBUG
1758 return nil != [extensionMap_ objectForKey:extension]; 1742 return nil != [extensionMap_ objectForKey:extension];
1759 } 1743 }
1760 1744
1761 - (NSArray *)extensionsCurrentlySet { 1745 - (NSArray *)extensionsCurrentlySet {
1762 return [extensionMap_ allKeys]; 1746 return [extensionMap_ allKeys];
1763 } 1747 }
1764 1748
1765 - (void)writeExtensionsToCodedOutputStream:(GPBCodedOutputStream *)output 1749 - (void)writeExtensionsToCodedOutputStream:(GPBCodedOutputStream *)output
1766 range:(GPBExtensionRange)range { 1750 range:(GPBExtensionRange)range {
1767 NSArray *sortedExtensions = [[extensionMap_ allKeys] 1751 NSArray *sortedExtensions = [[extensionMap_ allKeys]
1768 sortedArrayUsingSelector:@selector(compareByFieldNumber:)]; 1752 sortedArrayUsingSelector:@selector(compareByFieldNumber:)];
1769 uint32_t start = range.start; 1753 uint32_t start = range.start;
1770 uint32_t end = range.end; 1754 uint32_t end = range.end;
1771 for (GPBExtensionDescriptor *extension in sortedExtensions) { 1755 for (GPBExtensionDescriptor *extension in sortedExtensions) {
1772 uint32_t fieldNumber = extension.fieldNumber; 1756 uint32_t fieldNumber = extension.fieldNumber;
1773 if (fieldNumber >= start && fieldNumber < end) { 1757 if (fieldNumber >= start && fieldNumber < end) {
1774 id value = [extensionMap_ objectForKey:extension]; 1758 id value = [extensionMap_ objectForKey:extension];
1775 GPBWriteExtensionValueToOutputStream(extension, value, output); 1759 GPBWriteExtensionValueToOutputStream(extension, value, output);
1776 } 1760 }
1777 } 1761 }
1778 } 1762 }
1779 1763
1764 - (NSArray *)sortedExtensionsInUse {
1765 return [[extensionMap_ allKeys]
1766 sortedArrayUsingSelector:@selector(compareByFieldNumber:)];
1767 }
1768
1780 - (void)setExtension:(GPBExtensionDescriptor *)extension value:(id)value { 1769 - (void)setExtension:(GPBExtensionDescriptor *)extension value:(id)value {
1781 if (!value) { 1770 if (!value) {
1782 [self clearExtension:extension]; 1771 [self clearExtension:extension];
1783 return; 1772 return;
1784 } 1773 }
1785 1774
1786 CheckExtension(self, extension); 1775 CheckExtension(self, extension);
1787 1776
1788 if (extension.repeated) { 1777 if (extension.repeated) {
1789 [NSException raise:NSInvalidArgumentException 1778 [NSException raise:NSInvalidArgumentException
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after
1926 @try { 1915 @try {
1927 [message mergeDelimitedFromCodedInputStream:input 1916 [message mergeDelimitedFromCodedInputStream:input
1928 extensionRegistry:extensionRegistry]; 1917 extensionRegistry:extensionRegistry];
1929 if (errorPtr) { 1918 if (errorPtr) {
1930 *errorPtr = nil; 1919 *errorPtr = nil;
1931 } 1920 }
1932 } 1921 }
1933 @catch (NSException *exception) { 1922 @catch (NSException *exception) {
1934 message = nil; 1923 message = nil;
1935 if (errorPtr) { 1924 if (errorPtr) {
1936 *errorPtr = ErrorFromException(exception); 1925 *errorPtr = MessageErrorWithReason(GPBMessageErrorCodeMalformedData,
1926 exception.reason);
1937 } 1927 }
1938 } 1928 }
1939 #ifdef DEBUG 1929 #ifdef DEBUG
1940 if (message && !message.initialized) { 1930 if (message && !message.initialized) {
1941 message = nil; 1931 message = nil;
1942 if (errorPtr) { 1932 if (errorPtr) {
1943 *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil); 1933 *errorPtr = MessageError(GPBMessageErrorCodeMissingRequiredField, nil);
1944 } 1934 }
1945 } 1935 }
1946 #endif 1936 #endif
(...skipping 320 matching lines...) Expand 10 before | Expand all | Expand 10 after
2267 GPBDescriptor *descriptor = [self descriptor]; 2257 GPBDescriptor *descriptor = [self descriptor];
2268 GPBFileSyntax syntax = descriptor.file.syntax; 2258 GPBFileSyntax syntax = descriptor.file.syntax;
2269 GPBCodedInputStreamState *state = &input->state_; 2259 GPBCodedInputStreamState *state = &input->state_;
2270 uint32_t tag = 0; 2260 uint32_t tag = 0;
2271 NSUInteger startingIndex = 0; 2261 NSUInteger startingIndex = 0;
2272 NSArray *fields = descriptor->fields_; 2262 NSArray *fields = descriptor->fields_;
2273 NSUInteger numFields = fields.count; 2263 NSUInteger numFields = fields.count;
2274 while (YES) { 2264 while (YES) {
2275 BOOL merged = NO; 2265 BOOL merged = NO;
2276 tag = GPBCodedInputStreamReadTag(state); 2266 tag = GPBCodedInputStreamReadTag(state);
2277 if (tag == 0) {
2278 break; // Reached end.
2279 }
2280 for (NSUInteger i = 0; i < numFields; ++i) { 2267 for (NSUInteger i = 0; i < numFields; ++i) {
2281 if (startingIndex >= numFields) startingIndex = 0; 2268 if (startingIndex >= numFields) startingIndex = 0;
2282 GPBFieldDescriptor *fieldDescriptor = fields[startingIndex]; 2269 GPBFieldDescriptor *fieldDescriptor = fields[startingIndex];
2283 if (GPBFieldTag(fieldDescriptor) == tag) { 2270 if (GPBFieldTag(fieldDescriptor) == tag) {
2284 GPBFieldType fieldType = fieldDescriptor.fieldType; 2271 GPBFieldType fieldType = fieldDescriptor.fieldType;
2285 if (fieldType == GPBFieldTypeSingle) { 2272 if (fieldType == GPBFieldTypeSingle) {
2286 MergeSingleFieldFromCodedInputStream(self, fieldDescriptor, syntax, 2273 MergeSingleFieldFromCodedInputStream(self, fieldDescriptor, syntax,
2287 input, extensionRegistry); 2274 input, extensionRegistry);
2288 // Well formed protos will only have a single field once, advance 2275 // Well formed protos will only have a single field once, advance
2289 // the starting index to the next field. 2276 // the starting index to the next field.
(...skipping 18 matching lines...) Expand all
2308 field:fieldDescriptor 2295 field:fieldDescriptor
2309 parentMessage:self]; 2296 parentMessage:self];
2310 } 2297 }
2311 merged = YES; 2298 merged = YES;
2312 break; 2299 break;
2313 } else { 2300 } else {
2314 startingIndex += 1; 2301 startingIndex += 1;
2315 } 2302 }
2316 } // for(i < numFields) 2303 } // for(i < numFields)
2317 2304
2318 if (!merged && (tag != 0)) { 2305 if (!merged) {
2319 // Primitive, repeated types can be packed on unpacked on the wire, and 2306 // Primitive, repeated types can be packed on unpacked on the wire, and
2320 // are parsed either way. The above loop covered tag in the preferred 2307 // are parsed either way. The above loop covered tag in the preferred
2321 // for, so this need to check the alternate form. 2308 // for, so this need to check the alternate form.
2322 for (NSUInteger i = 0; i < numFields; ++i) { 2309 for (NSUInteger i = 0; i < numFields; ++i) {
2323 if (startingIndex >= numFields) startingIndex = 0; 2310 if (startingIndex >= numFields) startingIndex = 0;
2324 GPBFieldDescriptor *fieldDescriptor = fields[startingIndex]; 2311 GPBFieldDescriptor *fieldDescriptor = fields[startingIndex];
2325 if ((fieldDescriptor.fieldType == GPBFieldTypeRepeated) && 2312 if ((fieldDescriptor.fieldType == GPBFieldTypeRepeated) &&
2326 !GPBFieldDataTypeIsObject(fieldDescriptor) && 2313 !GPBFieldDataTypeIsObject(fieldDescriptor) &&
2327 (GPBFieldAlternateTag(fieldDescriptor) == tag)) { 2314 (GPBFieldAlternateTag(fieldDescriptor) == tag)) {
2328 BOOL alternateIsPacked = !fieldDescriptor.isPackable; 2315 BOOL alternateIsPacked = !fieldDescriptor.isPackable;
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
2563 [autocreatedExtensionMap_ removeObjectForKey:extension]; 2550 [autocreatedExtensionMap_ removeObjectForKey:extension];
2564 GPBClearMessageAutocreator(autocreatedValue); 2551 GPBClearMessageAutocreator(autocreatedValue);
2565 [autocreatedValue release]; 2552 [autocreatedValue release];
2566 } 2553 }
2567 } 2554 }
2568 } 2555 }
2569 } 2556 }
2570 2557
2571 #pragma mark - isEqual: & hash Support 2558 #pragma mark - isEqual: & hash Support
2572 2559
2573 - (BOOL)isEqual:(id)other { 2560 - (BOOL)isEqual:(GPBMessage *)other {
2574 if (other == self) { 2561 if (other == self) {
2575 return YES; 2562 return YES;
2576 } 2563 }
2577 if (![other isKindOfClass:[self class]] && 2564 if (![other isKindOfClass:[self class]] &&
2578 ![self isKindOfClass:[other class]]) { 2565 ![self isKindOfClass:[other class]]) {
2579 return NO; 2566 return NO;
2580 } 2567 }
2581 2568
2582 GPBMessage *otherMsg = other;
2583 GPBDescriptor *descriptor = [[self class] descriptor]; 2569 GPBDescriptor *descriptor = [[self class] descriptor];
2584 uint8_t *selfStorage = (uint8_t *)messageStorage_; 2570 uint8_t *selfStorage = (uint8_t *)messageStorage_;
2585 uint8_t *otherStorage = (uint8_t *)otherMsg->messageStorage_; 2571 uint8_t *otherStorage = (uint8_t *)other->messageStorage_;
2586 2572
2587 for (GPBFieldDescriptor *field in descriptor->fields_) { 2573 for (GPBFieldDescriptor *field in descriptor->fields_) {
2588 if (GPBFieldIsMapOrArray(field)) { 2574 if (GPBFieldIsMapOrArray(field)) {
2589 // In the case of a list or map, there is no _hasIvar to worry about. 2575 // In the case of a list or map, there is no _hasIvar to worry about.
2590 // NOTE: These are NSArray/GPB*Array or NSDictionary/GPB*Dictionary, but 2576 // NOTE: These are NSArray/GPB*Array or NSDictionary/GPB*Dictionary, but
2591 // the type doesn't really matter as the objects all support -count and 2577 // the type doesn't really matter as the objects all support -count and
2592 // -isEqual:. 2578 // -isEqual:.
2593 NSArray *resultMapOrArray = 2579 NSArray *resultMapOrArray =
2594 GPBGetObjectIvarWithFieldNoAutocreate(self, field); 2580 GPBGetObjectIvarWithFieldNoAutocreate(self, field);
2595 NSArray *otherMapOrArray = 2581 NSArray *otherMapOrArray =
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
2628 } 2614 }
2629 break; 2615 break;
2630 } 2616 }
2631 case GPBDataTypeSFixed32: 2617 case GPBDataTypeSFixed32:
2632 case GPBDataTypeInt32: 2618 case GPBDataTypeInt32:
2633 case GPBDataTypeSInt32: 2619 case GPBDataTypeSInt32:
2634 case GPBDataTypeEnum: 2620 case GPBDataTypeEnum:
2635 case GPBDataTypeFixed32: 2621 case GPBDataTypeFixed32:
2636 case GPBDataTypeUInt32: 2622 case GPBDataTypeUInt32:
2637 case GPBDataTypeFloat: { 2623 case GPBDataTypeFloat: {
2638 GPBInternalCompileAssert(sizeof(float) == sizeof(uint32_t), float_not_ 32_bits); 2624 _GPBCompileAssert(sizeof(float) == sizeof(uint32_t), float_not_32_bits );
2639 // These are all 32bit, signed/unsigned doesn't matter for equality. 2625 // These are all 32bit, signed/unsigned doesn't matter for equality.
2640 uint32_t *selfValPtr = (uint32_t *)&selfStorage[fieldOffset]; 2626 uint32_t *selfValPtr = (uint32_t *)&selfStorage[fieldOffset];
2641 uint32_t *otherValPtr = (uint32_t *)&otherStorage[fieldOffset]; 2627 uint32_t *otherValPtr = (uint32_t *)&otherStorage[fieldOffset];
2642 if (*selfValPtr != *otherValPtr) { 2628 if (*selfValPtr != *otherValPtr) {
2643 return NO; 2629 return NO;
2644 } 2630 }
2645 break; 2631 break;
2646 } 2632 }
2647 case GPBDataTypeSFixed64: 2633 case GPBDataTypeSFixed64:
2648 case GPBDataTypeInt64: 2634 case GPBDataTypeInt64:
2649 case GPBDataTypeSInt64: 2635 case GPBDataTypeSInt64:
2650 case GPBDataTypeFixed64: 2636 case GPBDataTypeFixed64:
2651 case GPBDataTypeUInt64: 2637 case GPBDataTypeUInt64:
2652 case GPBDataTypeDouble: { 2638 case GPBDataTypeDouble: {
2653 GPBInternalCompileAssert(sizeof(double) == sizeof(uint64_t), double_no t_64_bits); 2639 _GPBCompileAssert(sizeof(double) == sizeof(uint64_t), double_not_64_bi ts);
2654 // These are all 64bit, signed/unsigned doesn't matter for equality. 2640 // These are all 64bit, signed/unsigned doesn't matter for equality.
2655 uint64_t *selfValPtr = (uint64_t *)&selfStorage[fieldOffset]; 2641 uint64_t *selfValPtr = (uint64_t *)&selfStorage[fieldOffset];
2656 uint64_t *otherValPtr = (uint64_t *)&otherStorage[fieldOffset]; 2642 uint64_t *otherValPtr = (uint64_t *)&otherStorage[fieldOffset];
2657 if (*selfValPtr != *otherValPtr) { 2643 if (*selfValPtr != *otherValPtr) {
2658 return NO; 2644 return NO;
2659 } 2645 }
2660 break; 2646 break;
2661 } 2647 }
2662 case GPBDataTypeBytes: 2648 case GPBDataTypeBytes:
2663 case GPBDataTypeString: 2649 case GPBDataTypeString:
2664 case GPBDataTypeMessage: 2650 case GPBDataTypeMessage:
2665 case GPBDataTypeGroup: { 2651 case GPBDataTypeGroup: {
2666 // Type doesn't matter here, they all implement -isEqual:. 2652 // Type doesn't matter here, they all implement -isEqual:.
2667 id *selfValPtr = (id *)&selfStorage[fieldOffset]; 2653 id *selfValPtr = (id *)&selfStorage[fieldOffset];
2668 id *otherValPtr = (id *)&otherStorage[fieldOffset]; 2654 id *otherValPtr = (id *)&otherStorage[fieldOffset];
2669 if (![*selfValPtr isEqual:*otherValPtr]) { 2655 if (![*selfValPtr isEqual:*otherValPtr]) {
2670 return NO; 2656 return NO;
2671 } 2657 }
2672 break; 2658 break;
2673 } 2659 }
2674 } // switch() 2660 } // switch()
2675 } // if(mapOrArray)...else 2661 } // if(mapOrArray)...else
2676 } // for(fields) 2662 } // for(fields)
2677 2663
2678 // nil and empty are equal 2664 // nil and empty are equal
2679 if (extensionMap_.count != 0 || otherMsg->extensionMap_.count != 0) { 2665 if (extensionMap_.count != 0 || other->extensionMap_.count != 0) {
2680 if (![extensionMap_ isEqual:otherMsg->extensionMap_]) { 2666 if (![extensionMap_ isEqual:other->extensionMap_]) {
2681 return NO; 2667 return NO;
2682 } 2668 }
2683 } 2669 }
2684 2670
2685 // nil and empty are equal 2671 // nil and empty are equal
2686 GPBUnknownFieldSet *otherUnknowns = otherMsg->unknownFields_; 2672 GPBUnknownFieldSet *otherUnknowns = other->unknownFields_;
2687 if ([unknownFields_ countOfFields] != 0 || 2673 if ([unknownFields_ countOfFields] != 0 ||
2688 [otherUnknowns countOfFields] != 0) { 2674 [otherUnknowns countOfFields] != 0) {
2689 if (![unknownFields_ isEqual:otherUnknowns]) { 2675 if (![unknownFields_ isEqual:otherUnknowns]) {
2690 return NO; 2676 return NO;
2691 } 2677 }
2692 } 2678 }
2693 2679
2694 return YES; 2680 return YES;
2695 } 2681 }
2696 2682
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
2740 result = prime * result + value; 2726 result = prime * result + value;
2741 break; 2727 break;
2742 } 2728 }
2743 case GPBDataTypeSFixed32: 2729 case GPBDataTypeSFixed32:
2744 case GPBDataTypeInt32: 2730 case GPBDataTypeInt32:
2745 case GPBDataTypeSInt32: 2731 case GPBDataTypeSInt32:
2746 case GPBDataTypeEnum: 2732 case GPBDataTypeEnum:
2747 case GPBDataTypeFixed32: 2733 case GPBDataTypeFixed32:
2748 case GPBDataTypeUInt32: 2734 case GPBDataTypeUInt32:
2749 case GPBDataTypeFloat: { 2735 case GPBDataTypeFloat: {
2750 GPBInternalCompileAssert(sizeof(float) == sizeof(uint32_t), float_not_ 32_bits); 2736 _GPBCompileAssert(sizeof(float) == sizeof(uint32_t), float_not_32_bits );
2751 // These are all 32bit, just mix it in. 2737 // These are all 32bit, just mix it in.
2752 uint32_t *valPtr = (uint32_t *)&storage[fieldOffset]; 2738 uint32_t *valPtr = (uint32_t *)&storage[fieldOffset];
2753 result = prime * result + *valPtr; 2739 result = prime * result + *valPtr;
2754 break; 2740 break;
2755 } 2741 }
2756 case GPBDataTypeSFixed64: 2742 case GPBDataTypeSFixed64:
2757 case GPBDataTypeInt64: 2743 case GPBDataTypeInt64:
2758 case GPBDataTypeSInt64: 2744 case GPBDataTypeSInt64:
2759 case GPBDataTypeFixed64: 2745 case GPBDataTypeFixed64:
2760 case GPBDataTypeUInt64: 2746 case GPBDataTypeUInt64:
2761 case GPBDataTypeDouble: { 2747 case GPBDataTypeDouble: {
2762 GPBInternalCompileAssert(sizeof(double) == sizeof(uint64_t), double_no t_64_bits); 2748 _GPBCompileAssert(sizeof(double) == sizeof(uint64_t), double_not_64_bi ts);
2763 // These are all 64bit, just mix what fits into an NSUInteger in. 2749 // These are all 64bit, just mix what fits into an NSUInteger in.
2764 uint64_t *valPtr = (uint64_t *)&storage[fieldOffset]; 2750 uint64_t *valPtr = (uint64_t *)&storage[fieldOffset];
2765 result = prime * result + (NSUInteger)(*valPtr); 2751 result = prime * result + (NSUInteger)(*valPtr);
2766 break; 2752 break;
2767 } 2753 }
2768 case GPBDataTypeBytes: 2754 case GPBDataTypeBytes:
2769 case GPBDataTypeString: { 2755 case GPBDataTypeString: {
2770 // Type doesn't matter here, they both implement -hash:. 2756 // Type doesn't matter here, they both implement -hash:.
2771 id *valPtr = (id *)&storage[fieldOffset]; 2757 id *valPtr = (id *)&storage[fieldOffset];
2772 result = prime * result + [*valPtr hash]; 2758 result = prime * result + [*valPtr hash];
(...skipping 26 matching lines...) Expand all
2799 2785
2800 #pragma mark - Description Support 2786 #pragma mark - Description Support
2801 2787
2802 - (NSString *)description { 2788 - (NSString *)description {
2803 NSString *textFormat = GPBTextFormatForMessage(self, @" "); 2789 NSString *textFormat = GPBTextFormatForMessage(self, @" ");
2804 NSString *description = [NSString 2790 NSString *description = [NSString
2805 stringWithFormat:@"<%@ %p>: {\n%@}", [self class], self, textFormat]; 2791 stringWithFormat:@"<%@ %p>: {\n%@}", [self class], self, textFormat];
2806 return description; 2792 return description;
2807 } 2793 }
2808 2794
2809 #if defined(DEBUG) && DEBUG 2795 #if DEBUG
2810 2796
2811 // Xcode 5.1 added support for custom quick look info. 2797 // Xcode 5.1 added support for custom quick look info.
2812 // https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/CustomC lassDisplay_in_QuickLook/CH01-quick_look_for_custom_objects/CH01-quick_look_for_ custom_objects.html#//apple_ref/doc/uid/TP40014001-CH2-SW1 2798 // https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/CustomC lassDisplay_in_QuickLook/CH01-quick_look_for_custom_objects/CH01-quick_look_for_ custom_objects.html#//apple_ref/doc/uid/TP40014001-CH2-SW1
2813 - (id)debugQuickLookObject { 2799 - (id)debugQuickLookObject {
2814 return GPBTextFormatForMessage(self, nil); 2800 return GPBTextFormatForMessage(self, nil);
2815 } 2801 }
2816 2802
2817 #endif // DEBUG 2803 #endif // DEBUG
2818 2804
2819 #pragma mark - SerializedSize 2805 #pragma mark - SerializedSize
(...skipping 369 matching lines...) Expand 10 before | Expand all | Expand 10 after
3189 } 3175 }
3190 3176
3191 #pragma mark - KVC Support 3177 #pragma mark - KVC Support
3192 3178
3193 + (BOOL)accessInstanceVariablesDirectly { 3179 + (BOOL)accessInstanceVariablesDirectly {
3194 // Make sure KVC doesn't use instance variables. 3180 // Make sure KVC doesn't use instance variables.
3195 return NO; 3181 return NO;
3196 } 3182 }
3197 3183
3198 @end 3184 @end
3199
3200 #pragma mark - Messages from GPBUtilities.h but defined here for access to helpe rs.
3201
3202 // Only exists for public api, no core code should use this.
3203 id GPBGetMessageRepeatedField(GPBMessage *self, GPBFieldDescriptor *field) {
3204 #if defined(DEBUG) && DEBUG
3205 if (field.fieldType != GPBFieldTypeRepeated) {
3206 [NSException raise:NSInvalidArgumentException
3207 format:@"%@.%@ is not a repeated field.",
3208 [self class], field.name];
3209 }
3210 #endif
3211 GPBDescriptor *descriptor = [[self class] descriptor];
3212 GPBFileSyntax syntax = descriptor.file.syntax;
3213 return GetOrCreateArrayIvarWithField(self, field, syntax);
3214 }
3215
3216 // Only exists for public api, no core code should use this.
3217 id GPBGetMessageMapField(GPBMessage *self, GPBFieldDescriptor *field) {
3218 #if defined(DEBUG) && DEBUG
3219 if (field.fieldType != GPBFieldTypeMap) {
3220 [NSException raise:NSInvalidArgumentException
3221 format:@"%@.%@ is not a map<> field.",
3222 [self class], field.name];
3223 }
3224 #endif
3225 GPBDescriptor *descriptor = [[self class] descriptor];
3226 GPBFileSyntax syntax = descriptor.file.syntax;
3227 return GetOrCreateMapIvarWithField(self, field, syntax);
3228 }
3229
3230 #pragma clang diagnostic pop
OLDNEW
« no previous file with comments | « third_party/protobuf/objectivec/GPBMessage.h ('k') | third_party/protobuf/objectivec/GPBMessage_PackagePrivate.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698