factor/basis/specialized-arrays/direct/functor/functor.factor

43 lines
1007 B
Factor
Raw Normal View History

2008-11-14 21:18:16 -05:00
! Copyright (C) 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license.
USING: functors sequences sequences.private kernel words classes
math alien alien.c-types byte-arrays accessors
2009-08-13 12:05:46 -04:00
specialized-arrays prettyprint.custom ;
2008-11-14 21:18:16 -05:00
IN: specialized-arrays.direct.functor
FUNCTOR: define-direct-array ( T -- )
A' IS ${T}-array
>A' IS >${T}-array
<A'> IS <${A'}>
2009-08-13 12:05:46 -04:00
A'{ IS ${A'}{
2008-11-14 21:18:16 -05:00
A DEFINES-CLASS direct-${T}-array
2008-11-14 21:18:16 -05:00
<A> DEFINES <${A}>
NTH [ T dup c-type-getter-boxer array-accessor ]
2008-11-14 21:18:16 -05:00
SET-NTH [ T dup c-setter array-accessor ]
WHERE
TUPLE: A
{ underlying c-ptr read-only }
2008-11-14 21:18:16 -05:00
{ length fixnum read-only } ;
: <A> ( alien len -- direct-array ) A boa ; inline
2008-11-14 21:18:16 -05:00
M: A length length>> ;
M: A nth-unsafe underlying>> NTH call ;
M: A set-nth-unsafe underlying>> SET-NTH call ;
2009-01-28 16:46:04 -05:00
M: A like drop dup A instance? [ >A' ] unless ;
M: A new-sequence drop <A'> ;
2008-11-14 21:18:16 -05:00
2009-08-13 12:05:46 -04:00
M: A pprint-delims drop \ A'{ \ } ;
M: A >pprint-sequence ;
M: A pprint* pprint-object ;
2008-11-14 21:18:16 -05:00
INSTANCE: A sequence
;FUNCTOR