functors: Fix up look sharp

modern-harvey2
Doug Coleman 2017-12-02 12:01:02 -06:00
parent 036bc70a47
commit b45af1dcd6
5 changed files with 61 additions and 79 deletions

View File

@ -1,10 +1,10 @@
! Copyright (C) 2008, 2010 Slava Pestov. ! Copyright (C) 2008, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien alien.c-types alien.data alien.parser USING: accessors alien alien.c-types alien.data alien.parser
byte-arrays classes combinators fry functors kernel lexer locals arrays byte-arrays classes combinators fry functors2
make math math.vectors parser prettyprint.custom sequences kernel lexer locals make math math.parser math.vectors parser
sequences.private vocabs.generated vocabs.loader vocabs.parser prettyprint.custom sequences sequences.private vocabs.generated
words math.parser arrays functors2 ; vocabs.loader vocabs.parser words ;
IN: specialized-arrays IN: specialized-arrays
MIXIN: specialized-array-mixin MIXIN: specialized-array-mixin
@ -176,4 +176,4 @@ SYNTAX: \SPECIALIZED-ARRAYS:
! { "specialized-arrays" "mirrors" } "specialized-arrays.mirrors" require-when ! { "specialized-arrays" "mirrors" } "specialized-arrays.mirrors" require-when
! uchar define-specialized-array uchar define-specialized-array

View File

@ -1,4 +1,4 @@
USING: help.markup help.syntax byte-vectors alien byte-arrays classes.struct ; USING: alien byte-arrays classes.struct help.markup help.syntax ;
IN: specialized-vectors IN: specialized-vectors
HELP: \SPECIALIZED-VECTOR: HELP: \SPECIALIZED-VECTOR:

View File

@ -1,8 +1,10 @@
IN: specialized-vectors.tests IN: specialized-vectors.tests
USING: specialized-arrays specialized-vectors USING: specialized-arrays specialized-vectors
tools.test kernel sequences alien.c-types ; tools.test kernel sequences alien.c-types vectors.functor ;
SPECIALIZED-ARRAY: float SPECIALIZED-ARRAY: float
SPECIALIZED-VECTORS: float double ; SPECIALIZED-VECTORS: float double ;
SPECIAL-VECTOR: double
SPECIAL-VECTOR: float
{ 3 } [ double-vector{ 1 2 } 3 suffix! length ] unit-test { 3 } [ double-vector{ 1 2 } 3 suffix! length ] unit-test

View File

@ -1,69 +1,64 @@
! Copyright (C) 2008, 2010 Slava Pestov. ! Copyright (C) 2008, 2010 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors alien alien.c-types alien.data alien.parser USING: alien.parser arrays functors2 growable kernel lexer make
classes fry functors growable kernel lexer make math parser math.parser sequences vocabs.loader ;
prettyprint.custom sequences specialized-arrays vocabs.generated
vocabs.loader vocabs.parser ;
FROM: sequences.private => nth-unsafe ; FROM: sequences.private => nth-unsafe ;
FROM: specialized-arrays.private => nth-c-ptr direct-like ;
QUALIFIED: vectors.functor QUALIFIED: vectors.functor
IN: specialized-vectors IN: specialized-vectors
MIXIN: specialized-vector MIXIN: specialized-vector
<PRIVATE FUNCTOR: specialized-vector ( T: existing-word -- ) [[
<FUNCTOR: define-vector ( T -- ) USING: accessors alien alien.c-types alien.data classes growable
kernel math parser prettyprint.custom sequences
sequences.private specialized-arrays specialized-arrays.private
specialized-vectors vectors.functor ;
FROM: specialized-arrays.private => nth-c-ptr direct-like ;
V DEFINES-CLASS ${T}-vector SPECIALIZED-ARRAY: ${T}
A IS ${T}-array SPECIAL-VECTOR: ${T}
<A> IS <${A}>
<direct-A> IS <direct-${A}>
>V DEFERS >${V} SYNTAX: ${T}-vector{ \ } [ >${T}-vector ] parse-literal ;
V{ DEFINES ${V}{
WHERE INSTANCE: ${T}-vector specialized-vector
INSTANCE: ${T}-vector growable
V A <A> vectors.functor:define-vector M: ${T}-vector contract 2drop ; inline
M: V contract 2drop ; inline M: ${T}-vector element-size drop \ ${T} heap-size ; inline
M: V element-size drop \ T heap-size ; inline M: ${T}-vector pprint-delims drop \ ${T}-vector{ \ } ;
M: V pprint-delims drop \ V{ \ } ; M: ${T}-vector >pprint-sequence ;
M: V >pprint-sequence ; M: ${T}-vector pprint* pprint-object ;
M: V pprint* pprint-object ; M: ${T}-vector >c-ptr underlying>> underlying>> ; inline
M: ${T}-vector byte-length [ length ] [ element-size ] bi * ; inline
M: V >c-ptr underlying>> underlying>> ; inline M: ${T}-vector direct-like drop <direct-${T}-array> ; inline
M: V byte-length [ length ] [ element-size ] bi * ; inline M: ${T}-vector nth-c-ptr underlying>> nth-c-ptr ; inline
M: V direct-like drop <direct-A> ; inline M: ${T}-array like
M: V nth-c-ptr underlying>> nth-c-ptr ; inline drop dup ${T}-array instance? [
dup ${T}-vector instance? [
M: A like [ >c-ptr ] [ length>> ] bi <direct-${T}-array>
drop dup A instance? [ ] [ \ ${T} >c-array ] if
dup V instance? [
[ >c-ptr ] [ length>> ] bi <direct-A>
] [ \ T >c-array ] if
] unless ; inline ] unless ; inline
SYNTAX: V{ \ } [ >V ] parse-literal ; ]]
INSTANCE: V specialized-vector <PRIVATE
INSTANCE: V growable
;FUNCTOR>
: specialized-vector-vocab ( c-type -- vocab ) : specialized-vector-vocab ( c-type -- vocab )
[ [
"specialized-vectors.instances." % "specialized-vectors:functors:specialized-vector:" %
[ vocabulary>> % "." % ] ! [ vocabulary>> % "." % ]
[ name>> % ] ! [ name>> % ":" % ]
bi [ drop ]
[ 1array hashcode number>string % ] bi
] "" make ; ] "" make ;
PRIVATE> PRIVATE>
@ -71,21 +66,7 @@ PRIVATE>
: push-new ( vector -- new ) : push-new ( vector -- new )
[ length ] keep ensure nth-unsafe ; inline [ length ] keep ensure nth-unsafe ; inline
: define-vector-vocab ( type -- vocab )
underlying-type
[ specialized-vector-vocab ] [ '[ _ define-vector ] ] bi
generate-vocab ;
SYNTAX: \SPECIALIZED-VECTORS: SYNTAX: \SPECIALIZED-VECTORS:
";" [ ";" [ parse-c-type define-specialized-vector ] each-token ;
parse-c-type
[ define-specialized-array use-vocab ]
[ define-vector-vocab use-vocab ] bi
] each-token ;
SYNTAX: \SPECIALIZED-VECTOR:
scan-c-type
[ define-specialized-array use-vocab ]
[ define-vector-vocab use-vocab ] bi ;
{ "specialized-vectors" "mirrors" } "specialized-vectors.mirrors" require-when { "specialized-vectors" "mirrors" } "specialized-vectors.mirrors" require-when

View File

@ -1,35 +1,34 @@
! Copyright (C) 2009 Slava Pestov. ! Copyright (C) 2009 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: classes functors growable kernel math sequences USING: classes functors growable kernel math sequences
sequences.private ; sequences.private functors2 ;
IN: vectors.functor IN: vectors.functor
<FUNCTOR: define-vector ( V A <A> -- ) FUNCTOR: special-vector ( T: existing-word -- ) [[
USING: classes growable kernel math sequences sequences.private
specialized-arrays ;
<V> DEFINES <${V}> SPECIALIZED-ARRAY: ${T}
>V DEFINES >${V}
WHERE TUPLE: ${T}-vector { underlying ${T}-array } { length array-capacity } ;
TUPLE: V { underlying A } { length array-capacity } ; : >${T}-vector ( seq -- vector ) ${T}-vector new clone-like ; inline
: <V> ( capacity -- vector ) <A> 0 V boa ; inline : <${T}-vector> ( capacity -- vector ) <${T}-array> 0 ${T}-vector boa ; inline
M: V like M: ${T}-vector like
drop dup V instance? [ drop dup ${T}-vector instance? [
dup A instance? [ dup length V boa ] [ >V ] if dup ${T}-array instance? [ dup length ${T}-vector boa ] [ >${T}-vector ] if
] unless ; inline ] unless ; inline
M: V new-sequence drop [ <A> ] [ >fixnum ] bi V boa ; inline M: ${T}-vector new-sequence drop [ <${T}-array> ] [ >fixnum ] bi ${T}-vector boa ; inline
M: A new-resizable drop <V> ; inline M: ${T}-array new-resizable drop <${T}-vector> ; inline
M: V new-resizable drop <V> ; inline M: ${T}-vector new-resizable drop <${T}-vector> ; inline
M: V equal? over V instance? [ sequence= ] [ 2drop f ] if ; M: ${T}-vector equal? over ${T}-vector instance? [ sequence= ] [ 2drop f ] if ;
: >V ( seq -- vector ) V new clone-like ; inline INSTANCE: ${T}-vector growable
INSTANCE: V growable ]]
;FUNCTOR>