From: Doug Coleman Date: Tue, 5 Apr 2016 19:21:52 +0000 (-0700) Subject: core: clean up split-lines with subseq-as. clean up subseq/subseq-as/subseq-unsafe... X-Git-Tag: unmaintained~1228 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=51b70b2050968c35f19ea33735f71651e1c3bdb8 core: clean up split-lines with subseq-as. clean up subseq/subseq-as/subseq-unsafe/subseq-unsafe-as. --- diff --git a/core/sequences/sequences-docs.factor b/core/sequences/sequences-docs.factor index 6b4a8907d4..4eb46b2c65 100644 --- a/core/sequences/sequences-docs.factor +++ b/core/sequences/sequences-docs.factor @@ -990,6 +990,11 @@ HELP: subseq { $description "Outputs a new sequence consisting of all elements starting from and including " { $snippet "from" } ", and up to but not including " { $snippet "to" } "." } { $errors "Throws an error if " { $snippet "from" } " or " { $snippet "to" } " is out of bounds." } ; +HELP: subseq-as +{ $values { "from" "a non-negative integer" } { "to" "a non-negative integer" } { "seq" sequence } { "exemplar" sequence } { "subseq" "a new sequence" } } +{ $description "Outputs a new sequence consisting of all elements starting from and including " { $snippet "from" } ", and up to but not including " { $snippet "to" } " of type " { $snippet "exemplar" } "." } +{ $errors "Throws an error if " { $snippet "from" } " or " { $snippet "to" } " is out of bounds." } ; + HELP: clone-like { $values { "seq" sequence } { "exemplar" sequence } { "newseq" "a new sequence" } } { $description "Outputs a newly-allocated sequence with the same elements as " { $snippet "seq" } " but of the same type as " { $snippet "exemplar" } "." } @@ -1737,6 +1742,7 @@ $nl "Extracting a subsequence:" { $subsections subseq + subseq-as head tail head* diff --git a/core/sequences/sequences.factor b/core/sequences/sequences.factor index c7b33ab846..ddb0982fba 100644 --- a/core/sequences/sequences.factor +++ b/core/sequences/sequences.factor @@ -313,13 +313,19 @@ C: copy-state : copy-unsafe ( src i dst -- ) [ [ length check-length 0 ] keep ] 2dip (copy) drop ; inline +: subseq-unsafe-as ( from to seq exemplar -- subseq ) + [ subseq>copy (copy) ] dip like ; + : subseq-unsafe ( from to seq -- subseq ) - [ subseq>copy (copy) ] keep like ; + dup subseq-unsafe-as ; inline PRIVATE> +: subseq-as ( from to seq exemplar -- subseq ) + [ check-slice ] dip subseq-unsafe-as ; + : subseq ( from to seq -- subseq ) - [ check-slice subseq>copy (copy) ] keep like ; + dup subseq-as ; inline : head ( seq n -- headseq ) (head) subseq ; diff --git a/core/splitting/splitting.factor b/core/splitting/splitting.factor index fc52580498..ac75d387b7 100644 --- a/core/splitting/splitting.factor +++ b/core/splitting/splitting.factor @@ -106,16 +106,12 @@ PRIVATE> [ pick subseq ] keep swap ] map 2nip ; -GENERIC: string-lines ( str -- seq ) - -M: string string-lines +: string-lines ( seq -- seq' ) [ V{ } clone 0 ] dip [ 2dup bounds-check? ] [ 2dup [ "\r\n" member? ] find-from swapd [ over [ [ nip length ] keep ] unless - [ subseq suffix! ] 2keep [ 1 + ] dip + [ "" subseq-as suffix! ] 2keep [ 1 + ] dip ] dip CHAR: \r eq? [ 2dup ?nth CHAR: \n eq? [ [ 1 + ] dip ] when ] when - ] while 2drop { } like ; - -M: sbuf string-lines "" like string-lines ; + ] while 2drop { } like ; \ No newline at end of file diff --git a/extra/sequences/extras/extras.factor b/extra/sequences/extras/extras.factor index 55f24785a1..1d9148dd27 100644 --- a/extra/sequences/extras/extras.factor +++ b/extra/sequences/extras/extras.factor @@ -51,9 +51,6 @@ IN: sequences.extras ] each ] each ; inline -: subseq-as ( from to seq exemplar -- subseq ) - [ check-slice subseq>copy (copy) ] dip like ; - : map-like ( seq exemplar -- seq' ) '[ _ like ] map ; inline