diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2019-10-03 16:46:09 +0200 |
---|---|---|
committer | Andreas Rumpf <rumpf_a@web.de> | 2019-10-04 09:48:45 +0200 |
commit | 60d64d1aeffe6020eb591eca4be7ae672e45edc0 (patch) | |
tree | d66226b1c2ba3328b3d3ba91581c50585dee0480 /lib/pure/collections/sequtils.nim | |
parent | 68ce808db131081a565e9fb2dfca3d66197d8175 (diff) | |
download | Nim-60d64d1aeffe6020eb591eca4be7ae672e45edc0.tar.gz |
use system.move instead of system.shallowCopy if the GC mode requires it
Diffstat (limited to 'lib/pure/collections/sequtils.nim')
-rw-r--r-- | lib/pure/collections/sequtils.nim | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/lib/pure/collections/sequtils.nim b/lib/pure/collections/sequtils.nim index 9ca40de70..00bb0300d 100644 --- a/lib/pure/collections/sequtils.nim +++ b/lib/pure/collections/sequtils.nim @@ -417,7 +417,10 @@ proc keepIf*[T](s: var seq[T], pred: proc(x: T): bool {.closure.}) for i in 0 ..< len(s): if pred(s[i]): if pos != i: - shallowCopy(s[pos], s[i]) + when defined(gcDestructors): + s[pos] = move(s[i]) + else: + shallowCopy(s[pos], s[i]) inc(pos) setLen(s, pos) @@ -436,7 +439,10 @@ proc delete*[T](s: var seq[T]; first, last: Natural) = var j = min(len(s), last+1) var newLen = len(s)-j+i while i < newLen: - s[i].shallowCopy(s[j]) + when defined(gcDestructors): + s[i] = move(s[j]) + else: + s[i].shallowCopy(s[j]) inc(i) inc(j) setLen(s, newLen) @@ -461,7 +467,10 @@ proc insert*[T](dest: var seq[T], src: openArray[T], pos = 0) = # Move items after `pos` to the end of the sequence. while j >= pos: - dest[i].shallowCopy(dest[j]) + when defined(gcDestructors): + dest[i] = move(dest[j]) + else: + dest[i].shallowCopy(dest[j]) dec(i) dec(j) # Insert items from `dest` into `dest` at `pos` @@ -519,7 +528,10 @@ template keepItIf*(varSeq: seq, pred: untyped) = let it {.inject.} = varSeq[i] if pred: if pos != i: - shallowCopy(varSeq[pos], varSeq[i]) + when defined(gcDestructors): + varSeq[pos] = move(varSeq[i]) + else: + shallowCopy(varSeq[pos], varSeq[i]) inc(pos) setLen(varSeq, pos) |