From c603cd6cef43100aa83a62e15f96fd54c9fb987e Mon Sep 17 00:00:00 2001 From: "Kartik K. Agaram" Date: Fri, 13 Nov 2015 10:08:57 -0800 Subject: 2430 - make room for more transforms --- 076stream.mu | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 076stream.mu (limited to '076stream.mu') diff --git a/076stream.mu b/076stream.mu new file mode 100644 index 00000000..0ee3e2c1 --- /dev/null +++ b/076stream.mu @@ -0,0 +1,44 @@ +# new type to help incrementally read strings +container stream [ + index:number + data:address:array:character +] + +recipe new-stream [ + local-scope + result:address:stream <- new stream:type + i:address:number <- get-address *result, index:offset + *i <- copy 0 + d:address:address:array:character <- get-address *result, data:offset + *d <- next-ingredient + reply result +] + +recipe rewind-stream [ + local-scope + in:address:stream <- next-ingredient + x:address:number <- get-address *in, index:offset + *x <- copy 0 + reply in/same-as-arg:0 +] + +recipe read-line [ + local-scope + in:address:stream <- next-ingredient + idx:address:number <- get-address *in, index:offset + s:address:array:character <- get *in, data:offset + next-idx:number <- find-next s, 10/newline, *idx + result:address:array:character <- string-copy s, *idx, next-idx + *idx <- add next-idx, 1 # skip newline + reply result +] + +recipe end-of-stream? [ + local-scope + in:address:stream <- next-ingredient + idx:number <- get *in, index:offset + s:address:array:character <- get *in, data:offset + len:number <- length *s + result:boolean <- greater-or-equal idx, len + reply result +] -- cgit 1.4.1-2-gfad0