summary refs log tree commit diff stats
path: root/lib/system.nim
diff options
context:
space:
mode:
Diffstat (limited to 'lib/system.nim')
-rwxr-xr-xlib/system.nim25
1 files changed, 25 insertions, 0 deletions
diff --git a/lib/system.nim b/lib/system.nim
index 7788e40e5..13d0b4746 100755
--- a/lib/system.nim
+++ b/lib/system.nim
@@ -698,6 +698,31 @@ proc add *[T](x: var seq[T], y: openArray[T]) {.noSideEffect.} =
   setLen(x, xl + y.len)
   for i in 0..high(y): x[xl+i] = y[i]
 
+proc del* [T](x: var seq[T], i: int) {.noSideEffect.} = 
+  ## deletes the item at index `i` by putting ``x[high(x)]`` into position `i`.
+  ## This is an O(1) operation.
+  var xl = x.len
+  x[i] = x[xl-1]
+  setLen(x, xl-1)
+  
+proc delete*[T](x: var seq[T], i: int) {.noSideEffect.} = 
+  ## deletes the item at index `i` by moving ``x[i+1..]`` by one position.
+  ## This is an O(n) operation.
+  var xl = x.len
+  for j in i..xl-2: x[j] = x[j+1]
+  setLen(x, xl-1)
+  
+proc insert*[T](x: var seq[T], item: T, i = 0) {.noSideEffect.} = 
+  ## inserts `item` into `x` at position `i`.
+  var xl = x.len
+  setLen(x, xl+1)
+  var j = xl-1
+  while j >= i:
+    x[j+1] = x[j]
+    inc(j)
+  x[i] = item
+
+
 proc repr*[T](x: T): string {.magic: "Repr", noSideEffect.}
   ## takes any Nimrod variable and returns its string representation. It
   ## works even for complex data graphs with cycles. This is a great