From 063e0c98b83abd13b377d27e82267fb9a7a89680 Mon Sep 17 00:00:00 2001 From: Jacek Sieka Date: Thu, 14 Apr 2022 21:57:11 +0200 Subject: [PATCH] avoid zeroMem when resizing trivial seq:s might as well grab a new sequence instead --- stew/assign2.nim | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/stew/assign2.nim b/stew/assign2.nim index 5e34cf9..ecf0582 100644 --- a/stew/assign2.nim +++ b/stew/assign2.nim @@ -32,7 +32,14 @@ func assign*[T](tgt: var openArray[T], src: openArray[T]) = func assign*[T](tgt: var seq[T], src: openArray[T]) = mixin assign - tgt.setLen(src.len) + when T is SomeNumber: + # `setLen` does costly zero:ing both when growing _and_ shrinking + if tgt.len > src.len or tgt.len < src.len div 4: + tgt = newSeqUninitialized[T](src.len) + else: + tgt.setLen(src.len) + else: + tgt.setLen(src.len) assignImpl(tgt.toOpenArray(0, tgt.high), src) func assign*(tgt: var string, src: string) =