blob: 767bc5b12d24729a2a4e8646f98bd365f21e6f65 [file] [log] [blame]
Thomas Van Lenten30650d82015-05-01 08:57:16 -04001// Protocol Buffers - Google's data interchange format
2// Copyright 2008 Google Inc. All rights reserved.
Thomas Van Lenten30650d82015-05-01 08:57:16 -04003//
Joshua Haberman44bd65b2023-09-08 17:43:14 -07004// Use of this source code is governed by a BSD-style
5// license that can be found in the LICENSE file or at
6// https://developers.google.com/open-source/licenses/bsd
Thomas Van Lenten30650d82015-05-01 08:57:16 -04007
Thomas Van Lenten47f633e2024-07-01 07:25:23 -07008#import "GPBUnknownField.h"
Thomas Van Lentend846b0b2015-06-08 16:24:57 -04009#import "GPBUnknownField_PackagePrivate.h"
Thomas Van Lenten30650d82015-05-01 08:57:16 -040010
11#import "GPBArray.h"
Thomas Van Lenten36650a02016-03-07 12:07:03 -050012#import "GPBCodedOutputStream_PackagePrivate.h"
dmaclach3389bd92018-08-06 14:56:38 -070013#import "GPBUnknownFieldSet.h"
Thomas Van Lenten30650d82015-05-01 08:57:16 -040014
Thomas Van Lenten47f633e2024-07-01 07:25:23 -070015#define ASSERT_FIELD_TYPE(type) \
16 if (type_ != type) { \
17 [NSException raise:NSInternalInconsistencyException \
18 format:@"GPBUnknownField is the wrong type"]; \
19 }
20
Thomas Van Lentend846b0b2015-06-08 16:24:57 -040021@implementation GPBUnknownField {
Thomas Van Lenten30650d82015-05-01 08:57:16 -040022 @protected
23 int32_t number_;
Thomas Van Lenten47f633e2024-07-01 07:25:23 -070024 GPBUnknownFieldType type_;
25
26 union {
27 uint64_t intValue; // type == Varint, Fixed32, Fixed64
28 NSData *lengthDelimited; // type == LengthDelimited
29 GPBUnknownFields *group; // type == Group
30 struct { // type == Legacy
31 GPBUInt64Array *mutableVarintList;
32 GPBUInt32Array *mutableFixed32List;
33 GPBUInt64Array *mutableFixed64List;
34 NSMutableArray<NSData *> *mutableLengthDelimitedList;
35 NSMutableArray<GPBUnknownFieldSet *> *mutableGroupList;
36 } legacy;
37 } storage_;
Thomas Van Lenten30650d82015-05-01 08:57:16 -040038}
Thomas Van Lenten30650d82015-05-01 08:57:16 -040039
40@synthesize number = number_;
Thomas Van Lenten47f633e2024-07-01 07:25:23 -070041@synthesize type = type_;
Thomas Van Lenten30650d82015-05-01 08:57:16 -040042
43- (instancetype)initWithNumber:(int32_t)number {
44 if ((self = [super init])) {
45 number_ = number;
Thomas Van Lenten47f633e2024-07-01 07:25:23 -070046 type_ = GPBUnknownFieldTypeLegacy;
47 }
48 return self;
49}
50
51- (instancetype)initWithNumber:(int32_t)number varint:(uint64_t)varint {
52 if ((self = [super init])) {
53 number_ = number;
54 type_ = GPBUnknownFieldTypeVarint;
55 storage_.intValue = varint;
56 }
57 return self;
58}
59
60- (instancetype)initWithNumber:(int32_t)number fixed32:(uint32_t)fixed32 {
61 if ((self = [super init])) {
62 number_ = number;
63 type_ = GPBUnknownFieldTypeFixed32;
64 storage_.intValue = fixed32;
65 }
66 return self;
67}
68
69- (instancetype)initWithNumber:(int32_t)number fixed64:(uint64_t)fixed64 {
70 if ((self = [super init])) {
71 number_ = number;
72 type_ = GPBUnknownFieldTypeFixed64;
73 storage_.intValue = fixed64;
74 }
75 return self;
76}
77
78- (instancetype)initWithNumber:(int32_t)number lengthDelimited:(nonnull NSData *)data {
79 if ((self = [super init])) {
80 number_ = number;
81 type_ = GPBUnknownFieldTypeLengthDelimited;
82 storage_.lengthDelimited = [data copy];
83 }
84 return self;
85}
86
87- (instancetype)initWithNumber:(int32_t)number group:(nonnull GPBUnknownFields *)group {
88 if ((self = [super init])) {
89 number_ = number;
90 type_ = GPBUnknownFieldTypeGroup;
91 storage_.group = [group retain];
Thomas Van Lenten30650d82015-05-01 08:57:16 -040092 }
93 return self;
94}
95
96- (void)dealloc {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -070097 switch (type_) {
98 case GPBUnknownFieldTypeVarint:
99 case GPBUnknownFieldTypeFixed32:
100 case GPBUnknownFieldTypeFixed64:
101 break;
102 case GPBUnknownFieldTypeLengthDelimited:
103 [storage_.lengthDelimited release];
104 break;
105 case GPBUnknownFieldTypeGroup:
106 [storage_.group release];
107 break;
108 case GPBUnknownFieldTypeLegacy:
109 [storage_.legacy.mutableVarintList release];
110 [storage_.legacy.mutableFixed32List release];
111 [storage_.legacy.mutableFixed64List release];
112 [storage_.legacy.mutableLengthDelimitedList release];
113 [storage_.legacy.mutableGroupList release];
114 break;
115 }
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400116
117 [super dealloc];
118}
119
Thomas Van Lentenc8a440d2016-05-25 13:46:00 -0400120// Direct access is use for speed, to avoid even internally declaring things
121// read/write, etc. The warning is enabled in the project to ensure code calling
122// protos can turn on -Wdirect-ivar-access without issues.
123#pragma clang diagnostic push
124#pragma clang diagnostic ignored "-Wdirect-ivar-access"
125
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700126- (uint64_t)varint {
127 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeVarint);
128 return storage_.intValue;
129}
130
131- (uint32_t)fixed32 {
132 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeFixed32);
133 return (uint32_t)storage_.intValue;
134}
135
136- (uint64_t)fixed64 {
137 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeFixed64);
138 return storage_.intValue;
139}
140
141- (NSData *)lengthDelimited {
142 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLengthDelimited);
143 return storage_.lengthDelimited;
144}
145
146- (GPBUnknownFields *)group {
147 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeGroup);
148 return storage_.group;
149}
150
151- (GPBUInt64Array *)varintList {
152 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
153 return storage_.legacy.mutableVarintList;
154}
155
156- (GPBUInt32Array *)fixed32List {
157 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
158 return storage_.legacy.mutableFixed32List;
159}
160
161- (GPBUInt64Array *)fixed64List {
162 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
163 return storage_.legacy.mutableFixed64List;
164}
165
166- (NSArray<NSData *> *)lengthDelimitedList {
167 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
168 return storage_.legacy.mutableLengthDelimitedList;
169}
170
171- (NSArray<GPBUnknownFieldSet *> *)groupList {
172 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
173 return storage_.legacy.mutableGroupList;
174}
175
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400176- (id)copyWithZone:(NSZone *)zone {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700177 switch (type_) {
178 case GPBUnknownFieldTypeVarint:
179 return [[GPBUnknownField allocWithZone:zone] initWithNumber:number_ varint:storage_.intValue];
180 case GPBUnknownFieldTypeFixed32:
181 return [[GPBUnknownField allocWithZone:zone] initWithNumber:number_
182 fixed32:(uint32_t)storage_.intValue];
183 case GPBUnknownFieldTypeFixed64:
184 return [[GPBUnknownField allocWithZone:zone] initWithNumber:number_
185 fixed64:storage_.intValue];
186 case GPBUnknownFieldTypeLengthDelimited:
187 return [[GPBUnknownField allocWithZone:zone]
188 initWithNumber:number_
189 lengthDelimited:[storage_.lengthDelimited copyWithZone:zone]];
190 case GPBUnknownFieldTypeGroup:
191 return
192 [[GPBUnknownField allocWithZone:zone] initWithNumber:number_
193 group:[storage_.group copyWithZone:zone]];
194 case GPBUnknownFieldTypeLegacy: {
195 GPBUnknownField *result = [[GPBUnknownField allocWithZone:zone] initWithNumber:number_];
196 result->storage_.legacy.mutableFixed32List =
197 [storage_.legacy.mutableFixed32List copyWithZone:zone];
198 result->storage_.legacy.mutableFixed64List =
199 [storage_.legacy.mutableFixed64List copyWithZone:zone];
200 result->storage_.legacy.mutableLengthDelimitedList =
201 [storage_.legacy.mutableLengthDelimitedList mutableCopyWithZone:zone];
202 result->storage_.legacy.mutableVarintList =
203 [storage_.legacy.mutableVarintList copyWithZone:zone];
204 if (storage_.legacy.mutableGroupList.count) {
205 result->storage_.legacy.mutableGroupList = [[NSMutableArray allocWithZone:zone]
206 initWithCapacity:storage_.legacy.mutableGroupList.count];
207 for (GPBUnknownFieldSet *group in storage_.legacy.mutableGroupList) {
208 GPBUnknownFieldSet *copied = [group copyWithZone:zone];
209 [result->storage_.legacy.mutableGroupList addObject:copied];
210 [copied release];
211 }
212 }
213 return result;
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400214 }
215 }
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400216}
217
218- (BOOL)isEqual:(id)object {
219 if (self == object) return YES;
Thomas Van Lentend846b0b2015-06-08 16:24:57 -0400220 if (![object isKindOfClass:[GPBUnknownField class]]) return NO;
221 GPBUnknownField *field = (GPBUnknownField *)object;
Thomas Van Lentena274c672017-10-03 09:56:54 -0400222 if (number_ != field->number_) return NO;
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700223 if (type_ != field->type_) return NO;
224 switch (type_) {
225 case GPBUnknownFieldTypeVarint:
226 case GPBUnknownFieldTypeFixed32:
227 case GPBUnknownFieldTypeFixed64:
228 return storage_.intValue == field->storage_.intValue;
229 case GPBUnknownFieldTypeLengthDelimited:
230 return [storage_.lengthDelimited isEqual:field->storage_.lengthDelimited];
231 case GPBUnknownFieldTypeGroup:
232 return [storage_.group isEqual:field->storage_.group];
233 case GPBUnknownFieldTypeLegacy: {
234 BOOL equalVarint =
235 (storage_.legacy.mutableVarintList.count == 0 &&
236 field->storage_.legacy.mutableVarintList.count == 0) ||
237 [storage_.legacy.mutableVarintList isEqual:field->storage_.legacy.mutableVarintList];
238 if (!equalVarint) return NO;
239 BOOL equalFixed32 =
240 (storage_.legacy.mutableFixed32List.count == 0 &&
241 field->storage_.legacy.mutableFixed32List.count == 0) ||
242 [storage_.legacy.mutableFixed32List isEqual:field->storage_.legacy.mutableFixed32List];
243 if (!equalFixed32) return NO;
244 BOOL equalFixed64 =
245 (storage_.legacy.mutableFixed64List.count == 0 &&
246 field->storage_.legacy.mutableFixed64List.count == 0) ||
247 [storage_.legacy.mutableFixed64List isEqual:field->storage_.legacy.mutableFixed64List];
248 if (!equalFixed64) return NO;
249 BOOL equalLDList = (storage_.legacy.mutableLengthDelimitedList.count == 0 &&
250 field->storage_.legacy.mutableLengthDelimitedList.count == 0) ||
251 [storage_.legacy.mutableLengthDelimitedList
252 isEqual:field->storage_.legacy.mutableLengthDelimitedList];
253 if (!equalLDList) return NO;
254 BOOL equalGroupList =
255 (storage_.legacy.mutableGroupList.count == 0 &&
256 field->storage_.legacy.mutableGroupList.count == 0) ||
257 [storage_.legacy.mutableGroupList isEqual:field->storage_.legacy.mutableGroupList];
258 if (!equalGroupList) return NO;
259 return YES;
260 }
261 }
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400262}
263
264- (NSUInteger)hash {
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400265 const int prime = 31;
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700266 NSUInteger result = prime * number_ + type_;
267 switch (type_) {
268 case GPBUnknownFieldTypeVarint:
269 case GPBUnknownFieldTypeFixed32:
270 case GPBUnknownFieldTypeFixed64:
271 result = prime * result + (NSUInteger)storage_.intValue;
272 break;
273 case GPBUnknownFieldTypeLengthDelimited:
274 result = prime * result + [storage_.lengthDelimited hash];
275 break;
276 case GPBUnknownFieldTypeGroup:
277 result = prime * result + [storage_.group hash];
278 case GPBUnknownFieldTypeLegacy:
279 result = prime * result + [storage_.legacy.mutableVarintList hash];
280 result = prime * result + [storage_.legacy.mutableFixed32List hash];
281 result = prime * result + [storage_.legacy.mutableFixed64List hash];
282 result = prime * result + [storage_.legacy.mutableLengthDelimitedList hash];
283 result = prime * result + [storage_.legacy.mutableGroupList hash];
284 break;
285 }
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400286 return result;
287}
288
289- (void)writeToOutput:(GPBCodedOutputStream *)output {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700290 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
291 NSUInteger count = storage_.legacy.mutableVarintList.count;
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400292 if (count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700293 [output writeUInt64Array:number_ values:storage_.legacy.mutableVarintList tag:0];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400294 }
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700295 count = storage_.legacy.mutableFixed32List.count;
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400296 if (count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700297 [output writeFixed32Array:number_ values:storage_.legacy.mutableFixed32List tag:0];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400298 }
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700299 count = storage_.legacy.mutableFixed64List.count;
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400300 if (count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700301 [output writeFixed64Array:number_ values:storage_.legacy.mutableFixed64List tag:0];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400302 }
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700303 count = storage_.legacy.mutableLengthDelimitedList.count;
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400304 if (count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700305 [output writeBytesArray:number_ values:storage_.legacy.mutableLengthDelimitedList];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400306 }
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700307 count = storage_.legacy.mutableGroupList.count;
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400308 if (count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700309 [output writeUnknownGroupArray:number_ values:storage_.legacy.mutableGroupList];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400310 }
311}
312
313- (size_t)serializedSize {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700314 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400315 __block size_t result = 0;
316 int32_t number = number_;
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700317 [storage_.legacy.mutableVarintList
Thomas Van Lenten2fb33b82022-09-20 09:14:32 -0400318 enumerateValuesWithBlock:^(uint64_t value, __unused NSUInteger idx, __unused BOOL *stop) {
319 result += GPBComputeUInt64Size(number, value);
320 }];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400321
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700322 [storage_.legacy.mutableFixed32List
Thomas Van Lenten2fb33b82022-09-20 09:14:32 -0400323 enumerateValuesWithBlock:^(uint32_t value, __unused NSUInteger idx, __unused BOOL *stop) {
324 result += GPBComputeFixed32Size(number, value);
325 }];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400326
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700327 [storage_.legacy.mutableFixed64List
Thomas Van Lenten2fb33b82022-09-20 09:14:32 -0400328 enumerateValuesWithBlock:^(uint64_t value, __unused NSUInteger idx, __unused BOOL *stop) {
329 result += GPBComputeFixed64Size(number, value);
330 }];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400331
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700332 for (NSData *data in storage_.legacy.mutableLengthDelimitedList) {
Thomas Van Lentend846b0b2015-06-08 16:24:57 -0400333 result += GPBComputeBytesSize(number, data);
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400334 }
335
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700336 for (GPBUnknownFieldSet *set in storage_.legacy.mutableGroupList) {
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400337 result += GPBComputeUnknownGroupSize(number, set);
338 }
339
340 return result;
341}
342
343- (void)writeAsMessageSetExtensionToOutput:(GPBCodedOutputStream *)output {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700344 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
345 for (NSData *data in storage_.legacy.mutableLengthDelimitedList) {
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400346 [output writeRawMessageSetExtension:number_ value:data];
347 }
348}
349
350- (size_t)serializedSizeAsMessageSetExtension {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700351 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400352 size_t result = 0;
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700353 for (NSData *data in storage_.legacy.mutableLengthDelimitedList) {
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400354 result += GPBComputeRawMessageSetExtensionSize(number_, data);
355 }
356 return result;
357}
358
359- (NSString *)description {
Thomas Van Lentena274c672017-10-03 09:56:54 -0400360 NSMutableString *description =
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700361 [NSMutableString stringWithFormat:@"<%@ %p>: Field: %d", [self class], self, number_];
362 switch (type_) {
363 case GPBUnknownFieldTypeVarint:
364 [description appendFormat:@" varint: %llu", storage_.intValue];
365 break;
366 case GPBUnknownFieldTypeFixed32:
367 [description appendFormat:@" fixed32: %u", (uint32_t)storage_.intValue];
368 break;
369 case GPBUnknownFieldTypeFixed64:
370 [description appendFormat:@" fixed64: %llu", storage_.intValue];
371 break;
372 case GPBUnknownFieldTypeLengthDelimited:
373 [description appendFormat:@" fixed64: %@", storage_.lengthDelimited];
374 break;
375 case GPBUnknownFieldTypeGroup:
376 [description appendFormat:@" group: %@", storage_.group];
377 break;
378 case GPBUnknownFieldTypeLegacy:
379 [description appendString:@" {\n"];
380 [storage_.legacy.mutableVarintList
381 enumerateValuesWithBlock:^(uint64_t value, __unused NSUInteger idx, __unused BOOL *stop) {
382 [description appendFormat:@"\t%llu\n", value];
383 }];
384 [storage_.legacy.mutableFixed32List
385 enumerateValuesWithBlock:^(uint32_t value, __unused NSUInteger idx, __unused BOOL *stop) {
386 [description appendFormat:@"\t%u\n", value];
387 }];
388 [storage_.legacy.mutableFixed64List
389 enumerateValuesWithBlock:^(uint64_t value, __unused NSUInteger idx, __unused BOOL *stop) {
390 [description appendFormat:@"\t%llu\n", value];
391 }];
392 for (NSData *data in storage_.legacy.mutableLengthDelimitedList) {
393 [description appendFormat:@"\t%@\n", data];
394 }
395 for (GPBUnknownFieldSet *set in storage_.legacy.mutableGroupList) {
396 [description appendFormat:@"\t%@\n", set];
397 }
398 [description appendString:@"}"];
399 break;
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400400 }
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400401 return description;
402}
403
Thomas Van Lentend846b0b2015-06-08 16:24:57 -0400404- (void)mergeFromField:(GPBUnknownField *)other {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700405 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400406 GPBUInt64Array *otherVarintList = other.varintList;
407 if (otherVarintList.count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700408 if (storage_.legacy.mutableVarintList == nil) {
409 storage_.legacy.mutableVarintList = [otherVarintList copy];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400410 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700411 [storage_.legacy.mutableVarintList addValuesFromArray:otherVarintList];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400412 }
413 }
414
415 GPBUInt32Array *otherFixed32List = other.fixed32List;
416 if (otherFixed32List.count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700417 if (storage_.legacy.mutableFixed32List == nil) {
418 storage_.legacy.mutableFixed32List = [otherFixed32List copy];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400419 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700420 [storage_.legacy.mutableFixed32List addValuesFromArray:otherFixed32List];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400421 }
422 }
423
424 GPBUInt64Array *otherFixed64List = other.fixed64List;
425 if (otherFixed64List.count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700426 if (storage_.legacy.mutableFixed64List == nil) {
427 storage_.legacy.mutableFixed64List = [otherFixed64List copy];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400428 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700429 [storage_.legacy.mutableFixed64List addValuesFromArray:otherFixed64List];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400430 }
431 }
432
433 NSArray *otherLengthDelimitedList = other.lengthDelimitedList;
434 if (otherLengthDelimitedList.count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700435 if (storage_.legacy.mutableLengthDelimitedList == nil) {
436 storage_.legacy.mutableLengthDelimitedList = [otherLengthDelimitedList mutableCopy];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400437 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700438 [storage_.legacy.mutableLengthDelimitedList addObjectsFromArray:otherLengthDelimitedList];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400439 }
440 }
441
442 NSArray *otherGroupList = other.groupList;
443 if (otherGroupList.count > 0) {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700444 if (storage_.legacy.mutableGroupList == nil) {
445 storage_.legacy.mutableGroupList =
446 [[NSMutableArray alloc] initWithCapacity:otherGroupList.count];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400447 }
448 // Make our own mutable copies.
449 for (GPBUnknownFieldSet *group in otherGroupList) {
450 GPBUnknownFieldSet *copied = [group copy];
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700451 [storage_.legacy.mutableGroupList addObject:copied];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400452 [copied release];
453 }
454 }
455}
456
457- (void)addVarint:(uint64_t)value {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700458 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
459 if (storage_.legacy.mutableVarintList == nil) {
460 storage_.legacy.mutableVarintList = [[GPBUInt64Array alloc] initWithValues:&value count:1];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400461 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700462 [storage_.legacy.mutableVarintList addValue:value];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400463 }
464}
465
466- (void)addFixed32:(uint32_t)value {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700467 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
468 if (storage_.legacy.mutableFixed32List == nil) {
469 storage_.legacy.mutableFixed32List = [[GPBUInt32Array alloc] initWithValues:&value count:1];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400470 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700471 [storage_.legacy.mutableFixed32List addValue:value];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400472 }
473}
474
475- (void)addFixed64:(uint64_t)value {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700476 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
477 if (storage_.legacy.mutableFixed64List == nil) {
478 storage_.legacy.mutableFixed64List = [[GPBUInt64Array alloc] initWithValues:&value count:1];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400479 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700480 [storage_.legacy.mutableFixed64List addValue:value];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400481 }
482}
483
484- (void)addLengthDelimited:(NSData *)value {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700485 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
486 if (storage_.legacy.mutableLengthDelimitedList == nil) {
487 storage_.legacy.mutableLengthDelimitedList = [[NSMutableArray alloc] initWithObjects:&value
488 count:1];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400489 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700490 [storage_.legacy.mutableLengthDelimitedList addObject:value];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400491 }
492}
493
494- (void)addGroup:(GPBUnknownFieldSet *)value {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700495 ASSERT_FIELD_TYPE(GPBUnknownFieldTypeLegacy);
496 if (storage_.legacy.mutableGroupList == nil) {
497 storage_.legacy.mutableGroupList = [[NSMutableArray alloc] initWithObjects:&value count:1];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400498 } else {
Thomas Van Lenten47f633e2024-07-01 07:25:23 -0700499 [storage_.legacy.mutableGroupList addObject:value];
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400500 }
501}
502
Thomas Van Lentenc8a440d2016-05-25 13:46:00 -0400503#pragma clang diagnostic pop
504
Thomas Van Lenten30650d82015-05-01 08:57:16 -0400505@end