add an X-sequence mixin class for each specialized array type to span X-array, X-vector, and direct-X-array

Joe Groff 2009-08-25 15:58:18 -05:00
parent e2b444c8bd
commit 8baae18cdc
3 changed files with 11 additions and 0 deletions

View File

@ -8,6 +8,7 @@ IN: specialized-arrays.direct.functor
FUNCTOR: define-direct-array ( T -- ) FUNCTOR: define-direct-array ( T -- )
A' IS ${T}-array A' IS ${T}-array
S IS ${T}-sequence
>A' IS >${T}-array >A' IS >${T}-array
<A'> IS <${A'}> <A'> IS <${A'}>
A'{ IS ${A'}{ A'{ IS ${A'}{
@ -24,6 +25,8 @@ TUPLE: A
{ underlying c-ptr read-only } { underlying c-ptr read-only }
{ length fixnum read-only } ; { length fixnum read-only } ;
INSTANCE: A S
: <A> ( alien len -- direct-array ) A boa ; inline : <A> ( alien len -- direct-array ) A boa ; inline
M: A length length>> ; M: A length length>> ;
M: A nth-unsafe underlying>> NTH call ; M: A nth-unsafe underlying>> NTH call ;

View File

@ -16,6 +16,7 @@ M: bad-byte-array-length summary
FUNCTOR: define-array ( T -- ) FUNCTOR: define-array ( T -- )
A DEFINES-CLASS ${T}-array A DEFINES-CLASS ${T}-array
S DEFINES-CLASS ${T}-sequence
<A> DEFINES <${A}> <A> DEFINES <${A}>
(A) DEFINES (${A}) (A) DEFINES (${A})
>A DEFINES >${A} >A DEFINES >${A}
@ -27,10 +28,14 @@ SET-NTH [ T dup c-setter array-accessor ]
WHERE WHERE
MIXIN: S
TUPLE: A TUPLE: A
{ length array-capacity read-only } { length array-capacity read-only }
{ underlying byte-array read-only } ; { underlying byte-array read-only } ;
INSTANCE: A S
: <A> ( n -- specialized-array ) dup T <c-array> A boa ; inline : <A> ( n -- specialized-array ) dup T <c-array> A boa ; inline
: (A) ( n -- specialized-array ) dup T (c-array) A boa ; inline : (A) ( n -- specialized-array ) dup T (c-array) A boa ; inline

View File

@ -10,6 +10,7 @@ FUNCTOR: define-vector ( T -- )
V DEFINES-CLASS ${T}-vector V DEFINES-CLASS ${T}-vector
A IS ${T}-array A IS ${T}-array
S IS ${T}-sequence
<A> IS <${A}> <A> IS <${A}>
>V DEFERS >${V} >V DEFERS >${V}
@ -19,6 +20,8 @@ WHERE
V A <A> vectors.functor:define-vector V A <A> vectors.functor:define-vector
INSTANCE: V S
M: V contract 2drop ; M: V contract 2drop ;
M: V byte-length underlying>> byte-length ; M: V byte-length underlying>> byte-length ;