diff options
author | Charles Blake <cblake@csail.mit.edu> | 2015-07-26 07:52:30 -0400 |
---|---|---|
committer | Charles Blake <cblake@csail.mit.edu> | 2015-07-26 07:52:30 -0400 |
commit | ae303cc1c3feb7120202e7c711eb6044a3486834 (patch) | |
tree | fb68ad6f98919ea75bd79036b28e68a58a6afaa0 | |
parent | 3f4255dd14e197a398a63c0473fcbbc8b50f419c (diff) | |
download | Nim-ae303cc1c3feb7120202e7c711eb6044a3486834.tar.gz |
Rename [rR]ecord->[mM]emSlice, rec->ms, End->ending. Also update some comments.
-rw-r--r-- | lib/pure/memfiles.nim | 40 |
1 files changed, 20 insertions, 20 deletions
diff --git a/lib/pure/memfiles.nim b/lib/pure/memfiles.nim index 8e616b1e7..4f92b0e2f 100644 --- a/lib/pure/memfiles.nim +++ b/lib/pure/memfiles.nim @@ -245,35 +245,35 @@ proc close*(f: var MemFile) = if error: raiseOSError(lastErr) -type Record* {.unchecked.} = object +type MemSlice* {.unchecked.} = object data*: cstring size*: int -iterator records*(mfile: MemFile, delim='\l', eat='\r'): Record {.inline.} = +iterator memSlices*(mfile: MemFile, delim='\l', eat='\r'): MemSlice {.inline.} = proc c_memchr(cstr: cstring, c: char, n: csize): cstring {. importc: "memchr", header: "<string.h>" .} proc `-!`(p, q: cstring): int {.inline.} = return cast[int](p) -% cast[int](q) - var rec: Record - var End: cstring - rec.data = cast[cstring](mfile.mem) + var ms: MemSlice + var ending: cstring + ms.data = cast[cstring](mfile.mem) var remaining = mfile.size while remaining > 0: - End = c_memchr(rec.data, delim, remaining) - if End == nil: # unterminated final record - rec.size = remaining - yield rec + ending = c_memchr(ms.data, delim, remaining) + if ending == nil: # unterminated final slice + ms.size = remaining # Weird case..check eat? + yield ms break - rec.size = End -! rec.data # delimiter is not included - if eat != '\0' and rec.size > 0 and rec.data[rec.size - 1] == eat: - dec(rec.size) # exclude extra pre-delim ch - yield rec - rec.data = cast[cstring](cast[int](End) +% 1) # skip delimiter - remaining = mfile.size - (rec.data -! cast[cstring](mfile.mem)) - -proc toString*(rec: Record): string {.inline.} = + ms.size = ending -! ms.data # delim is NOT included + if eat != '\0' and ms.size > 0 and ms.data[ms.size - 1] == eat: + dec(ms.size) # trim pre-delim char + yield ms + ms.data = cast[cstring](cast[int](ending) +% 1) # skip delim + remaining = mfile.size - (ms.data -! cast[cstring](mfile.mem)) + +proc toString*(ms: MemSlice): string {.inline.} = proc toNimStr(str: cstring, len: int): string {. importc: "toNimStr" .} - result = toNimStr(cast[cstring](rec.data), rec.size) - result[result.len] = '\0' + result = toNimStr(cast[cstring](ms.data), ms.size) + result[result.len] = '\0' # toNimStr copies 1 extra byte but does not NUL-term iterator lines*(mfile: MemFile): string {.inline.} = - for rec in records(mfile): yield toString(rec) + for ms in memSlices(mfile): yield toString(ms) |