diff options
author | Andreas Rumpf <rumpf_a@web.de> | 2020-09-30 20:44:18 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-09-30 20:44:18 +0200 |
commit | 86d7b63e2ae7177061ff13d7b4cf32ba512f22f6 (patch) | |
tree | 2cd5700c416f2f520e9175e275a00192283cc0e6 /tests/views/tsplit_into_table.nim | |
parent | 9c86f4867e8475e38e1e8fb026b9cfd1555271a8 (diff) | |
download | Nim-86d7b63e2ae7177061ff13d7b4cf32ba512f22f6.tar.gz |
better support for view types (#15436)
* you can put borrows into tables * enforces mutating views only mutate mutable data
Diffstat (limited to 'tests/views/tsplit_into_table.nim')
-rw-r--r-- | tests/views/tsplit_into_table.nim | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/views/tsplit_into_table.nim b/tests/views/tsplit_into_table.nim new file mode 100644 index 000000000..49371b9a7 --- /dev/null +++ b/tests/views/tsplit_into_table.nim @@ -0,0 +1,40 @@ +discard """ + output: '''5: 231 +0: asdf +''' +""" + +import tables + +{.experimental: "views".} + +const + Whitespace = {' ', '\t', '\n', '\r'} + +proc split*(s: string, seps: set[char] = Whitespace, + maxsplit: int = -1): Table[int, openArray[char]] = + var last = 0 + var splits = maxsplit + result = initTable[int, openArray[char]]() + + while last <= len(s): + var first = last + while last < len(s) and s[last] notin seps: + inc(last) + if splits == 0: last = len(s) + result[first] = toOpenArray(s, first, last-1) + + if splits == 0: break + dec(splits) + inc(last) + +proc `$`(x: openArray[char]): string = + result = newString(x.len) + for i in 0..<x.len: result[i] = x[i] + +proc main() = + let words = split("asdf 231") + for i, x in words: + echo i, ": ", x + +main() |