about summary refs log tree commit diff stats
path: root/src/io/bufreader.nim
diff options
context:
space:
mode:
Diffstat (limited to 'src/io/bufreader.nim')
-rw-r--r--src/io/bufreader.nim60
1 files changed, 33 insertions, 27 deletions
diff --git a/src/io/bufreader.nim b/src/io/bufreader.nim
index 86ed1aed..203a2e52 100644
--- a/src/io/bufreader.nim
+++ b/src/io/bufreader.nim
@@ -10,19 +10,19 @@ type BufferedReader* = object
   bufIdx: int
   recvAux*: seq[cint] #TODO assert on unused ones
 
-proc sread*(reader: var BufferedReader; n: var SomeNumber)
-proc sread*[T](reader: var BufferedReader; s: var set[T])
-proc sread*[T: enum](reader: var BufferedReader; x: var T)
-proc sread*(reader: var BufferedReader; s: var string)
-proc sread*(reader: var BufferedReader; b: var bool)
+proc sread*(reader: var BufferedReader; n: out SomeNumber)
+proc sread*[T](reader: var BufferedReader; s: out set[T])
+proc sread*[T: enum](reader: var BufferedReader; x: out T)
+proc sread*(reader: var BufferedReader; s: out string)
+proc sread*(reader: var BufferedReader; b: out bool)
 proc sread*(reader: var BufferedReader; tup: var tuple)
-proc sread*[I, T](reader: var BufferedReader; a: var array[I, T])
-proc sread*(reader: var BufferedReader; s: var seq)
-proc sread*[U, V](reader: var BufferedReader; t: var Table[U, V])
+proc sread*[I, T](reader: var BufferedReader; a: out array[I, T])
+proc sread*[T](reader: var BufferedReader; s: out seq[T])
+proc sread*[U, V](reader: var BufferedReader; t: out Table[U, V])
 proc sread*(reader: var BufferedReader; obj: var object)
 proc sread*(reader: var BufferedReader; obj: var ref object)
-proc sread*[T](reader: var BufferedReader; o: var Option[T])
-proc sread*[T, E](reader: var BufferedReader; o: var Result[T, E])
+proc sread*[T](reader: var BufferedReader; o: out Option[T])
+proc sread*[T, E](reader: var BufferedReader; o: out Result[T, E])
 proc sread*(reader: var BufferedReader; c: var ARGBColor)
 proc sread*(reader: var BufferedReader; c: var CellColor)
 
@@ -57,30 +57,32 @@ proc readData*(reader: var BufferedReader; buffer: pointer; len: int) =
   copyMem(buffer, addr reader.buffer[reader.bufIdx], len)
   reader.bufIdx += len
 
-proc sread*(reader: var BufferedReader; n: var SomeNumber) =
+proc sread*(reader: var BufferedReader; n: out SomeNumber) =
+  n = 0
   reader.readData(addr n, sizeof(n))
 
-proc sread*[T: enum](reader: var BufferedReader; x: var T) =
-  var i: int
+proc sread*[T: enum](reader: var BufferedReader; x: out T) =
+  var i {.noinit.}: int
   reader.sread(i)
   x = cast[T](i)
 
-proc sread*[T](reader: var BufferedReader; s: var set[T]) =
-  var len: int
+proc sread*[T](reader: var BufferedReader; s: out set[T]) =
+  var len {.noinit.}: int
   reader.sread(len)
+  s = {}
   for i in 0 ..< len:
     var x: T
     reader.sread(x)
     s.incl(x)
 
-proc sread*(reader: var BufferedReader; s: var string) =
-  var len: int
+proc sread*(reader: var BufferedReader; s: out string) =
+  var len {.noinit.}: int
   reader.sread(len)
   s = newString(len)
   if len > 0:
     reader.readData(addr s[0], len)
 
-proc sread*(reader: var BufferedReader; b: var bool) =
+proc sread*(reader: var BufferedReader; b: out bool) =
   var n: uint8
   reader.sread(n)
   if n == 1u8:
@@ -93,20 +95,21 @@ proc sread*(reader: var BufferedReader; tup: var tuple) =
   for f in tup.fields:
     reader.sread(f)
 
-proc sread*[I; T](reader: var BufferedReader; a: var array[I, T]) =
+proc sread*[I; T](reader: var BufferedReader; a: out array[I, T]) =
   for x in a.mitems:
     reader.sread(x)
 
-proc sread*(reader: var BufferedReader; s: var seq) =
-  var len: int
+proc sread*[T](reader: var BufferedReader; s: out seq[T]) =
+  var len {.noinit.}: int
   reader.sread(len)
-  s.setLen(len)
+  s = newSeq[T](len)
   for x in s.mitems:
     reader.sread(x)
 
-proc sread*[U; V](reader: var BufferedReader; t: var Table[U, V]) =
-  var len: int
+proc sread*[U; V](reader: var BufferedReader; t: out Table[U, V]) =
+  var len {.noinit.}: int
   reader.sread(len)
+  t = initTable[U, V](len)
   for i in 0..<len:
     var k: U
     reader.sread(k)
@@ -115,6 +118,7 @@ proc sread*[U; V](reader: var BufferedReader; t: var Table[U, V]) =
     t[k] = v
 
 proc sread*(reader: var BufferedReader; obj: var object) =
+  obj = default(typeof(obj))
   for f in obj.fields:
     reader.sread(f)
 
@@ -122,10 +126,12 @@ proc sread*(reader: var BufferedReader; obj: var ref object) =
   var n: bool
   reader.sread(n)
   if n:
-    new(obj)
+    obj = new(typeof(obj))
     reader.sread(obj[])
+  else:
+    obj = nil
 
-proc sread*[T](reader: var BufferedReader; o: var Option[T]) =
+proc sread*[T](reader: var BufferedReader; o: out Option[T]) =
   var x: bool
   reader.sread(x)
   if x:
@@ -135,7 +141,7 @@ proc sread*[T](reader: var BufferedReader; o: var Option[T]) =
   else:
     o = none(T)
 
-proc sread*[T, E](reader: var BufferedReader; o: var Result[T, E]) =
+proc sread*[T, E](reader: var BufferedReader; o: out Result[T, E]) =
   var x: bool
   reader.sread(x)
   if x: