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