Skip to content

Commit 799e73b

Browse files
thomasvlcopybara-github
authored andcommitted
[ObjC] Small shuffling for code quality/style.
- Add some casts to avoid warnings with signed/unsigned comparisons. - Use `objc_direct` for some internal helpers and get out of having the one class know about the internals of the other class. - Update GPBUtilities to not need to know internals of these PiperOrigin-RevId: 908844212
1 parent f331eba commit 799e73b

5 files changed

Lines changed: 92 additions & 87 deletions

File tree

objectivec/GPBUnknownField.m

Lines changed: 53 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,16 @@
2020
format:@"GPBUnknownField is the wrong type"]; \
2121
}
2222

23-
@implementation GPBUnknownField
23+
@implementation GPBUnknownField {
24+
int32_t number_;
25+
GPBUnknownFieldType type_;
26+
27+
union {
28+
uint64_t intValue; // type == Varint, Fixed32, Fixed64
29+
NSData *_Nonnull lengthDelimited; // type == LengthDelimited
30+
GPBUnknownFields *_Nonnull group; // type == Group
31+
} storage_;
32+
}
2433

2534
@synthesize number = number_;
2635
@synthesize type = type_;
@@ -158,8 +167,8 @@ - (BOOL)isEqual:(id)object {
158167
}
159168

160169
- (NSUInteger)hash {
161-
const int prime = 31;
162-
NSUInteger result = prime * number_ + type_;
170+
const NSUInteger prime = 31;
171+
NSUInteger result = prime * (NSUInteger)number_ + type_;
163172
switch (type_) {
164173
case GPBUnknownFieldTypeVarint:
165174
case GPBUnknownFieldTypeFixed32:
@@ -198,6 +207,47 @@ - (NSString *)description {
198207
return description;
199208
}
200209

210+
#pragma mark - Internal Methods
211+
212+
- (size_t)computeSerializedSize {
213+
switch (type_) {
214+
case GPBUnknownFieldTypeVarint:
215+
return GPBComputeUInt64Size(number_, storage_.intValue);
216+
case GPBUnknownFieldTypeFixed32:
217+
return GPBComputeFixed32Size(number_, (uint32_t)storage_.intValue);
218+
case GPBUnknownFieldTypeFixed64:
219+
return GPBComputeFixed64Size(number_, storage_.intValue);
220+
case GPBUnknownFieldTypeLengthDelimited:
221+
return GPBComputeBytesSize(number_, storage_.lengthDelimited);
222+
case GPBUnknownFieldTypeGroup:
223+
return (GPBComputeTagSize(number_) * 2) + [storage_.group computeSerializedSize];
224+
}
225+
}
226+
227+
- (void)writeToCodedOutputStream:(nonnull GPBCodedOutputStream *)output {
228+
switch (type_) {
229+
case GPBUnknownFieldTypeVarint:
230+
[output writeUInt64:number_ value:storage_.intValue];
231+
break;
232+
case GPBUnknownFieldTypeFixed32:
233+
[output writeFixed32:number_ value:(uint32_t)storage_.intValue];
234+
break;
235+
case GPBUnknownFieldTypeFixed64:
236+
[output writeFixed64:number_ value:storage_.intValue];
237+
break;
238+
case GPBUnknownFieldTypeLengthDelimited:
239+
[output writeBytes:number_ value:storage_.lengthDelimited];
240+
break;
241+
case GPBUnknownFieldTypeGroup:
242+
[output writeRawVarint32:(int32_t)GPBWireFormatMakeTag((uint32_t)number_,
243+
GPBWireFormatStartGroup)];
244+
[storage_.group writeToCodedOutputStream:output];
245+
[output
246+
writeRawVarint32:(int32_t)GPBWireFormatMakeTag((uint32_t)number_, GPBWireFormatEndGroup)];
247+
break;
248+
}
249+
}
250+
201251
#pragma clang diagnostic pop
202252

203253
@end

objectivec/GPBUnknownField_PackagePrivate.h

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,16 @@
99

1010
#import "GPBUnknownField.h"
1111

12-
@interface GPBUnknownField () {
13-
@package
14-
int32_t number_;
15-
GPBUnknownFieldType type_;
16-
17-
union {
18-
uint64_t intValue; // type == Varint, Fixed32, Fixed64
19-
NSData *_Nonnull lengthDelimited; // type == LengthDelimited
20-
GPBUnknownFields *_Nonnull group; // type == Group
21-
} storage_;
22-
}
12+
@interface GPBUnknownField ()
2313

2414
- (nonnull instancetype)initWithNumber:(int32_t)number varint:(uint64_t)varint;
2515
- (nonnull instancetype)initWithNumber:(int32_t)number fixed32:(uint32_t)fixed32;
2616
- (nonnull instancetype)initWithNumber:(int32_t)number fixed64:(uint64_t)fixed64;
2717
- (nonnull instancetype)initWithNumber:(int32_t)number lengthDelimited:(nonnull NSData *)data;
2818
- (nonnull instancetype)initWithNumber:(int32_t)number group:(nonnull GPBUnknownFields *)group;
2919

20+
- (size_t)computeSerializedSize __attribute__((objc_direct));
21+
- (void)writeToCodedOutputStream:(nonnull GPBCodedOutputStream *)output
22+
__attribute__((objc_direct));
23+
3024
@end

objectivec/GPBUnknownFields.m

Lines changed: 22 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -42,60 +42,6 @@ @interface GPBUnknownFields () {
4242
#pragma clang diagnostic push
4343
#pragma clang diagnostic ignored "-Wdirect-ivar-access"
4444

45-
GPB_NOINLINE
46-
static size_t ComputeSerializeSize(GPBUnknownFields *_Nonnull self) {
47-
size_t result = 0;
48-
for (GPBUnknownField *field in self->fields_) {
49-
uint32_t fieldNumber = field->number_;
50-
switch (field->type_) {
51-
case GPBUnknownFieldTypeVarint:
52-
result += GPBComputeUInt64Size(fieldNumber, field->storage_.intValue);
53-
break;
54-
case GPBUnknownFieldTypeFixed32:
55-
result += GPBComputeFixed32Size(fieldNumber, (uint32_t)field->storage_.intValue);
56-
break;
57-
case GPBUnknownFieldTypeFixed64:
58-
result += GPBComputeFixed64Size(fieldNumber, field->storage_.intValue);
59-
break;
60-
case GPBUnknownFieldTypeLengthDelimited:
61-
result += GPBComputeBytesSize(fieldNumber, field->storage_.lengthDelimited);
62-
break;
63-
case GPBUnknownFieldTypeGroup:
64-
result +=
65-
(GPBComputeTagSize(fieldNumber) * 2) + ComputeSerializeSize(field->storage_.group);
66-
break;
67-
}
68-
}
69-
return result;
70-
}
71-
72-
GPB_NOINLINE
73-
static void WriteToCoddedOutputStream(GPBUnknownFields *_Nonnull self,
74-
GPBCodedOutputStream *_Nonnull output) {
75-
for (GPBUnknownField *field in self->fields_) {
76-
uint32_t fieldNumber = field->number_;
77-
switch (field->type_) {
78-
case GPBUnknownFieldTypeVarint:
79-
[output writeUInt64:fieldNumber value:field->storage_.intValue];
80-
break;
81-
case GPBUnknownFieldTypeFixed32:
82-
[output writeFixed32:fieldNumber value:(uint32_t)field->storage_.intValue];
83-
break;
84-
case GPBUnknownFieldTypeFixed64:
85-
[output writeFixed64:fieldNumber value:field->storage_.intValue];
86-
break;
87-
case GPBUnknownFieldTypeLengthDelimited:
88-
[output writeBytes:fieldNumber value:field->storage_.lengthDelimited];
89-
break;
90-
case GPBUnknownFieldTypeGroup:
91-
[output writeRawVarint32:GPBWireFormatMakeTag(fieldNumber, GPBWireFormatStartGroup)];
92-
WriteToCoddedOutputStream(field->storage_.group, output);
93-
[output writeRawVarint32:GPBWireFormatMakeTag(fieldNumber, GPBWireFormatEndGroup)];
94-
break;
95-
}
96-
}
97-
}
98-
9945
GPB_NOINLINE
10046
static BOOL MergeFromInputStream(GPBUnknownFields *self, GPBCodedInputStream *input,
10147
uint32_t endTag) {
@@ -107,7 +53,7 @@ static BOOL MergeFromInputStream(GPBUnknownFields *self, GPBCodedInputStream *in
10753
NSMutableArray<GPBUnknownField *> *fields = self->fields_;
10854
@try {
10955
while (YES) {
110-
uint32_t tag = GPBCodedInputStreamReadTag(state);
56+
uint32_t tag = (uint32_t)GPBCodedInputStreamReadTag(state);
11157
if (tag == endTag) {
11258
return YES;
11359
}
@@ -116,10 +62,10 @@ static BOOL MergeFromInputStream(GPBUnknownFields *self, GPBCodedInputStream *in
11662
return NO;
11763
}
11864
GPBWireFormat wireType = GPBWireFormatGetTagWireType(tag);
119-
int32_t fieldNumber = GPBWireFormatGetTagFieldNumber(tag);
65+
int32_t fieldNumber = (int32_t)GPBWireFormatGetTagFieldNumber(tag);
12066
switch (wireType) {
12167
case GPBWireFormatVarint: {
122-
uint64_t value = GPBCodedInputStreamReadInt64(state);
68+
uint64_t value = (uint64_t)GPBCodedInputStreamReadInt64(state);
12369
GPBUnknownField *field = [[GPBUnknownField alloc] initWithNumber:fieldNumber
12470
varint:value];
12571
[fields addObject:field];
@@ -157,9 +103,9 @@ static BOOL MergeFromInputStream(GPBUnknownFields *self, GPBCodedInputStream *in
157103
[fields addObject:field];
158104
[field release];
159105
[group release]; // Still will be held in the field/fields.
160-
uint32_t endGroupTag = GPBWireFormatMakeTag(fieldNumber, GPBWireFormatEndGroup);
106+
uint32_t endGroupTag = GPBWireFormatMakeTag((uint32_t)fieldNumber, GPBWireFormatEndGroup);
161107
if (MergeFromInputStream(group, input, endGroupTag)) {
162-
GPBCodedInputStreamCheckLastTagWas(state, endGroupTag);
108+
GPBCodedInputStreamCheckLastTagWas(state, (int32_t)endGroupTag);
163109
} else {
164110
[NSException
165111
raise:NSInternalInconsistencyException
@@ -332,7 +278,7 @@ - (void)clearFieldNumber:(int32_t)fieldNumber {
332278
NSMutableIndexSet *toRemove = nil;
333279
NSUInteger idx = 0;
334280
for (GPBUnknownField *field in fields_) {
335-
if (field->number_ == fieldNumber) {
281+
if (field.number == fieldNumber) {
336282
if (toRemove == nil) {
337283
toRemove = [[NSMutableIndexSet alloc] initWithIndex:idx];
338284
} else {
@@ -361,11 +307,11 @@ - (NSData *)serializeAsData {
361307
if (fields_.count == 0) {
362308
return [NSData data];
363309
}
364-
size_t expectedSize = ComputeSerializeSize(self);
310+
size_t expectedSize = [self computeSerializedSize];
365311
NSMutableData *data = [NSMutableData dataWithLength:expectedSize];
366312
GPBCodedOutputStream *stream = [[GPBCodedOutputStream alloc] initWithData:data];
367313
@try {
368-
WriteToCoddedOutputStream(self, stream);
314+
[self writeToCodedOutputStream:stream];
369315
[stream flush];
370316
} @catch (NSException *exception) {
371317
#if defined(DEBUG) && DEBUG
@@ -379,6 +325,20 @@ - (NSData *)serializeAsData {
379325
return data;
380326
}
381327

328+
- (size_t)computeSerializedSize {
329+
size_t result = 0;
330+
for (GPBUnknownField *field in self->fields_) {
331+
result += [field computeSerializedSize];
332+
}
333+
return result;
334+
}
335+
336+
- (void)writeToCodedOutputStream:(nonnull GPBCodedOutputStream *)output {
337+
for (GPBUnknownField *field in self->fields_) {
338+
[field writeToCodedOutputStream:output];
339+
}
340+
}
341+
382342
@end
383343

384344
@implementation GPBUnknownFields (AccessHelpers)

objectivec/GPBUnknownFields_PackagePrivate.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,8 @@
1212
@interface GPBUnknownFields ()
1313

1414
- (nonnull NSData *)serializeAsData;
15+
- (size_t)computeSerializedSize __attribute__((objc_direct));
16+
- (void)writeToCodedOutputStream:(nonnull GPBCodedOutputStream *)output
17+
__attribute__((objc_direct));
1518

1619
@end

objectivec/GPBUtilities.m

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
#import "GPBMessage.h"
1919
#import "GPBMessage_PackagePrivate.h"
2020
#import "GPBUnknownField.h"
21-
#import "GPBUnknownField_PackagePrivate.h"
2221
#import "GPBUnknownFields.h"
2322
#import "GPBUtilities.h"
2423
#import "GPBUtilities_PackagePrivate.h"
@@ -1941,8 +1940,8 @@ static void AppendTextFormatForUnknownFields(GPBUnknownFields *ufs, NSMutableStr
19411940
[sortedFields
19421941
sortWithOptions:NSSortStable
19431942
usingComparator:^NSComparisonResult(GPBUnknownField *field1, GPBUnknownField *field2) {
1944-
int32_t fieldNumber1 = field1->number_;
1945-
int32_t fieldNumber2 = field2->number_;
1943+
int32_t fieldNumber1 = field1.number;
1944+
int32_t fieldNumber2 = field2.number;
19461945
if (fieldNumber1 < fieldNumber2) {
19471946
return NSOrderedAscending;
19481947
} else if (fieldNumber1 > fieldNumber2) {
@@ -1955,25 +1954,24 @@ static void AppendTextFormatForUnknownFields(GPBUnknownFields *ufs, NSMutableStr
19551954
NSString *subIndent = nil;
19561955

19571956
for (GPBUnknownField *field in sortedFields) {
1958-
int32_t fieldNumber = field->number_;
1959-
switch (field->type_) {
1957+
int32_t fieldNumber = field.number;
1958+
switch (field.type) {
19601959
case GPBUnknownFieldTypeVarint:
1961-
[toStr appendFormat:@"%@%d: %llu\n", lineIndent, fieldNumber, field->storage_.intValue];
1960+
[toStr appendFormat:@"%@%d: %llu\n", lineIndent, fieldNumber, field.varint];
19621961
break;
19631962
case GPBUnknownFieldTypeFixed32:
1964-
[toStr appendFormat:@"%@%d: 0x%X\n", lineIndent, fieldNumber,
1965-
(uint32_t)field->storage_.intValue];
1963+
[toStr appendFormat:@"%@%d: 0x%X\n", lineIndent, fieldNumber, field.fixed32];
19661964
break;
19671965
case GPBUnknownFieldTypeFixed64:
1968-
[toStr appendFormat:@"%@%d: 0x%llX\n", lineIndent, fieldNumber, field->storage_.intValue];
1966+
[toStr appendFormat:@"%@%d: 0x%llX\n", lineIndent, fieldNumber, field.fixed64];
19691967
break;
19701968
case GPBUnknownFieldTypeLengthDelimited:
19711969
[toStr appendFormat:@"%@%d: ", lineIndent, fieldNumber];
1972-
AppendBufferAsString(field->storage_.lengthDelimited, toStr);
1970+
AppendBufferAsString(field.lengthDelimited, toStr);
19731971
[toStr appendString:@"\n"];
19741972
break;
19751973
case GPBUnknownFieldTypeGroup: {
1976-
GPBUnknownFields *group = field->storage_.group;
1974+
GPBUnknownFields *group = field.group;
19771975
if (group.empty) {
19781976
[toStr appendFormat:@"%@%d: {}\n", lineIndent, fieldNumber];
19791977
} else {

0 commit comments

Comments
 (0)