Skip to content

Commit defdcae

Browse files
authored
Reserve table entry storage (#286)
Pre-allocate per-table key/array lists on first insert to reduce reallocation during parsing.
1 parent ff278ec commit defdcae

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

Sources/TOMLDecoder/Parsing/Parser.swift

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,8 +461,14 @@ struct Parser {
461461
keyValues.append(kv)
462462

463463
if isKeyed {
464+
if keyTables[tableIndex].table.keyValues.isEmpty {
465+
keyTables[tableIndex].table.keyValues.reserveCapacity(8)
466+
}
464467
keyTables[tableIndex].table.keyValues.append(index)
465468
} else {
469+
if tables[tableIndex].keyValues.isEmpty {
470+
tables[tableIndex].keyValues.reserveCapacity(8)
471+
}
466472
tables[tableIndex].keyValues.append(index)
467473
}
468474
return index
@@ -498,8 +504,14 @@ struct Parser {
498504
keyTables.append(KeyTablePair(key: key, keyHash: keyHash, table: newTable))
499505

500506
if isKeyed {
507+
if keyTables[tableIndex].table.tables.isEmpty {
508+
keyTables[tableIndex].table.tables.reserveCapacity(8)
509+
}
501510
keyTables[tableIndex].table.tables.append(index)
502511
} else {
512+
if tables[tableIndex].tables.isEmpty {
513+
tables[tableIndex].tables.reserveCapacity(8)
514+
}
503515
tables[tableIndex].tables.append(index)
504516
}
505517
return index
@@ -515,8 +527,14 @@ struct Parser {
515527
let index = keyArrays.count
516528
keyArrays.append(KeyArrayPair(key: key, keyHash: keyHash, array: InternalTOMLArray(kind: kind)))
517529
if isKeyed {
530+
if keyTables[tableIndex].table.arrays.isEmpty {
531+
keyTables[tableIndex].table.arrays.reserveCapacity(8)
532+
}
518533
keyTables[tableIndex].table.arrays.append(index)
519534
} else {
535+
if tables[tableIndex].arrays.isEmpty {
536+
tables[tableIndex].arrays.reserveCapacity(8)
537+
}
520538
tables[tableIndex].arrays.append(index)
521539
}
522540
return index

0 commit comments

Comments
 (0)