type
RefSeq[T] = ref seq[T]
proc newRefSeq[T]: RefSeq[T] =
result = new(seq[T])
result[] = @[]
proc add[T](rs: RefSeq[T], t: T) =
add rs[], t
proc delete[T](rs: RefSeq[T], i: int): T =
delete rs[], i
iterator items[T](rs: RefSeq[T]): T =
for i in items(rs[]):
yield i
# Test
let rs = newRefSeq[int]()
add rs, 1
add rs, 2
add rs, 3
echo delete(rs, 0)
for i in rs:
echo i
dHlwZQogIFJlZlNlcVtUXSA9IHJlZiBzZXFbVF0KICAKcHJvYyBuZXdSZWZTZXFbVF06IFJlZlNlcVtUXSA9CiAgcmVzdWx0ID0gbmV3KHNlcVtUXSkKICByZXN1bHRbXSA9IEBbXQogIApwcm9jIGFkZFtUXShyczogUmVmU2VxW1RdLCB0OiBUKSA9CiAgYWRkIHJzW10sIHQKICAKcHJvYyBkZWxldGVbVF0ocnM6IFJlZlNlcVtUXSwgaTogaW50KTogVCA9CiAgZGVsZXRlIHJzW10sIGkKICAKaXRlcmF0b3IgaXRlbXNbVF0ocnM6IFJlZlNlcVtUXSk6IFQgPQogIGZvciBpIGluIGl0ZW1zKHJzW10pOgogICAgeWllbGQgaQogICAgCiMgVGVzdAoKbGV0IHJzID0gbmV3UmVmU2VxW2ludF0oKQphZGQgcnMsIDEKYWRkIHJzLCAyCmFkZCBycywgMwoKZWNobyBkZWxldGUocnMsIDApCgpmb3IgaSBpbiByczoKICBlY2hvIGk=