factor/basis/specialized-vectors/functor/functor.factor

47 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 growable
2008-12-08 15:58:00 -05:00
prettyprint.custom kernel words classes math parser ;
2008-11-14 21:18:16 -05:00
IN: specialized-vectors.functor
FUNCTOR: define-vector ( T -- )
A IS ${T}-array
2008-12-03 01:05:32 -05:00
<A> IS <${A}>
2008-11-14 21:18:16 -05:00
V DEFINES ${T}-vector
<V> DEFINES <${V}>
>V DEFINES >${V}
V{ DEFINES ${V}{
WHERE
TUPLE: V { underlying A } { length array-capacity } ;
: <V> ( capacity -- vector ) <A> execute 0 V boa ; inline
2008-11-14 21:18:16 -05:00
M: V like
drop dup V instance? [
dup A instance? [ dup length V boa ] [ >V execute ] if
] unless ;
M: V new-sequence drop [ <A> execute ] [ >fixnum ] bi V boa ;
M: A new-resizable drop <V> execute ;
M: V equal? over V instance? [ sequence= ] [ 2drop f ] if ;
: >V ( seq -- vector ) V new clone-like ; inline
2008-11-14 21:18:16 -05:00
M: V pprint-delims drop V{ \ } ;
M: V >pprint-sequence ;
M: V pprint* pprint-object ;
2008-12-03 04:43:52 -05:00
: V{ \ } [ >V execute ] parse-literal ; parsing
2008-11-14 21:18:16 -05:00
INSTANCE: V growable
;FUNCTOR