Skip to content

Commit 863db49

Browse files
committed
Look up field name just once for a repeated field, not once for every item
1 parent 3daa120 commit 863db49

File tree

1 file changed

+20
-10
lines changed

1 file changed

+20
-10
lines changed

Sources/SwiftProtobuf/TextFormatEncodingVisitor.swift

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -292,53 +292,59 @@ internal struct TextFormatEncodingVisitor: Visitor {
292292
// the name lookup once for the array, rather than once for each element:
293293

294294
mutating func visitRepeatedFloatField(value: [Float], fieldNumber: Int) throws {
295+
let fieldName = formatFieldName(lookingUp: fieldNumber)
295296
for v in value {
296-
emitFieldName(lookingUp: fieldNumber)
297+
encoder.emitFieldName(name: fieldName)
297298
encoder.startRegularField()
298299
encoder.putFloatValue(value: v)
299300
encoder.endRegularField()
300301
}
301302
}
302303

303304
mutating func visitRepeatedDoubleField(value: [Double], fieldNumber: Int) throws {
305+
let fieldName = formatFieldName(lookingUp: fieldNumber)
304306
for v in value {
305-
emitFieldName(lookingUp: fieldNumber)
307+
encoder.emitFieldName(name: fieldName)
306308
encoder.startRegularField()
307309
encoder.putDoubleValue(value: v)
308310
encoder.endRegularField()
309311
}
310312
}
311313

312314
mutating func visitRepeatedInt32Field(value: [Int32], fieldNumber: Int) throws {
315+
let fieldName = formatFieldName(lookingUp: fieldNumber)
313316
for v in value {
314-
emitFieldName(lookingUp: fieldNumber)
317+
encoder.emitFieldName(name: fieldName)
315318
encoder.startRegularField()
316319
encoder.putInt64(value: Int64(v))
317320
encoder.endRegularField()
318321
}
319322
}
320323

321324
mutating func visitRepeatedInt64Field(value: [Int64], fieldNumber: Int) throws {
325+
let fieldName = formatFieldName(lookingUp: fieldNumber)
322326
for v in value {
323-
emitFieldName(lookingUp: fieldNumber)
327+
encoder.emitFieldName(name: fieldName)
324328
encoder.startRegularField()
325329
encoder.putInt64(value: v)
326330
encoder.endRegularField()
327331
}
328332
}
329333

330334
mutating func visitRepeatedUInt32Field(value: [UInt32], fieldNumber: Int) throws {
335+
let fieldName = formatFieldName(lookingUp: fieldNumber)
331336
for v in value {
332-
emitFieldName(lookingUp: fieldNumber)
337+
encoder.emitFieldName(name: fieldName)
333338
encoder.startRegularField()
334339
encoder.putUInt64(value: UInt64(v))
335340
encoder.endRegularField()
336341
}
337342
}
338343

339344
mutating func visitRepeatedUInt64Field(value: [UInt64], fieldNumber: Int) throws {
345+
let fieldName = formatFieldName(lookingUp: fieldNumber)
340346
for v in value {
341-
emitFieldName(lookingUp: fieldNumber)
347+
encoder.emitFieldName(name: fieldName)
342348
encoder.startRegularField()
343349
encoder.putUInt64(value: v)
344350
encoder.endRegularField()
@@ -365,35 +371,39 @@ internal struct TextFormatEncodingVisitor: Visitor {
365371
}
366372

367373
mutating func visitRepeatedBoolField(value: [Bool], fieldNumber: Int) throws {
374+
let fieldName = formatFieldName(lookingUp: fieldNumber)
368375
for v in value {
369-
emitFieldName(lookingUp: fieldNumber)
376+
encoder.emitFieldName(name: fieldName)
370377
encoder.startRegularField()
371378
encoder.putBoolValue(value: v)
372379
encoder.endRegularField()
373380
}
374381
}
375382

376383
mutating func visitRepeatedStringField(value: [String], fieldNumber: Int) throws {
384+
let fieldName = formatFieldName(lookingUp: fieldNumber)
377385
for v in value {
378-
emitFieldName(lookingUp: fieldNumber)
386+
encoder.emitFieldName(name: fieldName)
379387
encoder.startRegularField()
380388
encoder.putStringValue(value: v)
381389
encoder.endRegularField()
382390
}
383391
}
384392

385393
mutating func visitRepeatedBytesField(value: [Data], fieldNumber: Int) throws {
394+
let fieldName = formatFieldName(lookingUp: fieldNumber)
386395
for v in value {
387-
emitFieldName(lookingUp: fieldNumber)
396+
encoder.emitFieldName(name: fieldName)
388397
encoder.startRegularField()
389398
encoder.putBytesValue(value: v)
390399
encoder.endRegularField()
391400
}
392401
}
393402

394403
mutating func visitRepeatedEnumField<E: Enum>(value: [E], fieldNumber: Int) throws {
404+
let fieldName = formatFieldName(lookingUp: fieldNumber)
395405
for v in value {
396-
emitFieldName(lookingUp: fieldNumber)
406+
encoder.emitFieldName(name: fieldName)
397407
encoder.startRegularField()
398408
encoder.putEnumValue(value: v)
399409
encoder.endRegularField()

0 commit comments

Comments
 (0)