+++ /dev/null
-Slava Pestov
+++ /dev/null
-USING: cords strings tools.test kernel sequences ;
-IN: cords.tests
-
-[ "hello world" ] [ "hello" " world" cord-append dup like ] unit-test
-[ "hello world" ] [ { "he" "llo" " world" } cord-concat dup like ] unit-test
+++ /dev/null
-! Copyright (C) 2008 Slava Pestov.
-! See http://factorcode.org/license.txt for BSD license.
-USING: accessors assocs sequences sorting binary-search math
-math.order arrays combinators kernel ;
-IN: cords
-
-<PRIVATE
-
-TUPLE: simple-cord
- { first read-only } { second read-only } ;
-
-M: simple-cord length
- [ first>> length ] [ second>> length ] bi + ; inline
-
-M: simple-cord virtual-exemplar first>> ; inline
-
-M: simple-cord virtual@
- 2dup first>> length <
- [ first>> ] [ [ first>> length - ] [ second>> ] bi ] if ; inline
-
-TUPLE: multi-cord
- { count read-only } { seqs read-only } ;
-
-M: multi-cord length count>> ; inline
-
-M: multi-cord virtual@
- dupd
- seqs>> [ first <=> ] with search nip
- [ first - ] [ second ] bi ; inline
-
-M: multi-cord virtual-exemplar
- seqs>> [ f ] [ first second ] if-empty ; inline
-
-: <cord> ( seqs -- cord )
- dup length 2 = [
- first2 simple-cord boa
- ] [
- [ 0 [ length + ] accumulate ] keep zip multi-cord boa
- ] if ; inline
-
-PRIVATE>
-
-UNION: cord simple-cord multi-cord ;
-
-INSTANCE: cord virtual-sequence
-
-INSTANCE: multi-cord virtual-sequence
-
-: cord-append ( seq1 seq2 -- cord )
- {
- { [ over empty? ] [ nip ] }
- { [ dup empty? ] [ drop ] }
- { [ 2dup [ cord? ] both? ] [ [ seqs>> values ] bi@ append <cord> ] }
- { [ over cord? ] [ [ seqs>> values ] dip suffix <cord> ] }
- { [ dup cord? ] [ seqs>> values swap prefix <cord> ] }
- [ 2array <cord> ]
- } cond ; inline
-
-: cord-concat ( seqs -- cord )
- {
- { [ dup empty? ] [ drop f ] }
- { [ dup length 1 = ] [ first ] }
- [
- [
- {
- { [ dup cord? ] [ seqs>> values ] }
- { [ dup empty? ] [ drop { } ] }
- [ 1array ]
- } cond
- ] map concat <cord>
- ]
- } cond ; inline
+++ /dev/null
-Virtual sequence concatenation
+++ /dev/null
-collections
! (c)Joe Groff bsd license
USING: accessors alien.c-types arrays assocs classes combinators
-combinators.short-circuit cords fry kernel locals math
+combinators.short-circuit fry kernel locals math
math.vectors math.vectors.simd math.vectors.simd.intrinsics sequences ;
-FROM: alien.c-types => char uchar short ushort int uint longlong ulonglong float double ;
+FROM: alien.c-types =>
+ char uchar short ushort int uint longlong ulonglong
+ float double ;
IN: math.vectors.conversion
ERROR: bad-vconvert from-type to-type ;
! (c)2009 Slava Pestov, Joe Groff bsd license
USING: accessors alien alien.c-types alien.data combinators
-cords cpu.architecture fry generalizations kernel libc locals
-math math.libm math.order math.ranges math.vectors sequences
-sequences.private specialized-arrays vocabs.loader ;
+sequences.cords cpu.architecture fry generalizations kernel
+libc locals math math.libm math.order math.ranges math.vectors
+sequences sequences.private specialized-arrays vocabs.loader ;
QUALIFIED-WITH: alien.c-types c
SPECIALIZED-ARRAYS:
c:char c:short c:int c:longlong
--- /dev/null
+Slava Pestov
--- /dev/null
+USING: sequences.cords strings tools.test kernel sequences ;
+IN: sequences.cords.tests
+
+[ "hello world" ] [ "hello" " world" cord-append dup like ] unit-test
+[ "hello world" ] [ { "he" "llo" " world" } cord-concat dup like ] unit-test
--- /dev/null
+! Copyright (C) 2008 Slava Pestov.
+! See http://factorcode.org/license.txt for BSD license.
+USING: accessors assocs sequences sorting binary-search math
+math.order arrays combinators kernel ;
+IN: sequences.cords
+
+<PRIVATE
+
+TUPLE: simple-cord
+ { first read-only } { second read-only } ;
+
+M: simple-cord length
+ [ first>> length ] [ second>> length ] bi + ; inline
+
+M: simple-cord virtual-exemplar first>> ; inline
+
+M: simple-cord virtual@
+ 2dup first>> length <
+ [ first>> ] [ [ first>> length - ] [ second>> ] bi ] if ; inline
+
+TUPLE: multi-cord
+ { count read-only } { seqs read-only } ;
+
+M: multi-cord length count>> ; inline
+
+M: multi-cord virtual@
+ dupd
+ seqs>> [ first <=> ] with search nip
+ [ first - ] [ second ] bi ; inline
+
+M: multi-cord virtual-exemplar
+ seqs>> [ f ] [ first second ] if-empty ; inline
+
+: <cord> ( seqs -- cord )
+ dup length 2 = [
+ first2 simple-cord boa
+ ] [
+ [ 0 [ length + ] accumulate ] keep zip multi-cord boa
+ ] if ; inline
+
+PRIVATE>
+
+UNION: cord simple-cord multi-cord ;
+
+INSTANCE: cord virtual-sequence
+
+INSTANCE: multi-cord virtual-sequence
+
+: cord-append ( seq1 seq2 -- cord )
+ {
+ { [ over empty? ] [ nip ] }
+ { [ dup empty? ] [ drop ] }
+ { [ 2dup [ cord? ] both? ] [ [ seqs>> values ] bi@ append <cord> ] }
+ { [ over cord? ] [ [ seqs>> values ] dip suffix <cord> ] }
+ { [ dup cord? ] [ seqs>> values swap prefix <cord> ] }
+ [ 2array <cord> ]
+ } cond ; inline
+
+: cord-concat ( seqs -- cord )
+ {
+ { [ dup empty? ] [ drop f ] }
+ { [ dup length 1 = ] [ first ] }
+ [
+ [
+ {
+ { [ dup cord? ] [ seqs>> values ] }
+ { [ dup empty? ] [ drop { } ] }
+ [ 1array ]
+ } cond
+ ] map concat <cord>
+ ]
+ } cond ; inline
--- /dev/null
+Virtual sequence concatenation
--- /dev/null
+collections