Skip to content

Commit

Permalink
Avoid intermediate Uint8List
Browse files Browse the repository at this point in the history
  • Loading branch information
osa1 committed Oct 24, 2023
1 parent fb82ad6 commit 98410e2
Showing 1 changed file with 5 additions and 15 deletions.
20 changes: 5 additions & 15 deletions protobuf/lib/src/protobuf/coded_buffer_writer.dart
Original file line number Diff line number Diff line change
Expand Up @@ -152,21 +152,11 @@ class CodedBufferWriter {
final leftInChunk = bytesInChunk - chunkPos;
final bytesToCopyFromChunk =
leftInChunk > bytesToCopy ? bytesToCopy : leftInChunk;
final endPos = chunkPos + bytesToCopyFromChunk;

if (bytesToCopyFromChunk <= 20) {
while (chunkPos < endPos) {
buffer[outPos++] = chunk[chunkPos++];
}
bytesToCopy -= bytesToCopyFromChunk;
} else {
final chunkSlice = Uint8List.sublistView(chunk, chunkPos, endPos);
buffer.setRange(
outPos, outPos + bytesToCopyFromChunk, chunkSlice);
chunkPos += bytesToCopyFromChunk;
outPos += bytesToCopyFromChunk;
bytesToCopy -= bytesToCopyFromChunk;
}
buffer.setRange(
outPos, outPos + bytesToCopyFromChunk, chunk, chunkPos);
chunkPos += bytesToCopyFromChunk;
outPos += bytesToCopyFromChunk;
bytesToCopy -= bytesToCopyFromChunk;

// Move to the next chunk if the current one is exhausted.
if (chunkPos == bytesInChunk) {
Expand Down

0 comments on commit 98410e2

Please sign in to comment.