! 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 specialized-arrays ; IN: specialized-arrays.direct.functor FUNCTOR: define-direct-array ( T -- ) A' IS ${T}-array >A' IS >${T}-array IS <${A'}> A DEFINES direct-${T}-array DEFINES <${A}> NTH [ T dup c-getter array-accessor ] SET-NTH [ T dup c-setter array-accessor ] WHERE TUPLE: A { underlying alien read-only } { length fixnum read-only } ; : ( alien len -- direct-array ) A boa ; inline M: A length length>> ; M: A nth-unsafe underlying>> NTH call ; M: A set-nth-unsafe underlying>> SET-NTH call ; M: A like drop dup A instance? [ >A' execute ] unless ; M: A new-sequence drop execute ; INSTANCE: A sequence ;FUNCTOR