! 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 parser prettyprint.backend prettyprint.custom prettyprint.sections ; IN: specialized-arrays.direct.functor > ] [ length>> ] bi [ pprint* ] bi@ ] pprint-prefix ; PRIVATE> FUNCTOR: define-direct-array ( T -- ) A' IS ${T}-array S IS ${T}-sequence >A' IS >${T}-array IS <${A'}> A'{ IS ${A'}{ A DEFINES-CLASS direct-${T}-array DEFINES <${A}> A'@ DEFINES ${A'}@ NTH [ T dup c-type-getter-boxer array-accessor ] SET-NTH [ T dup c-setter array-accessor ] WHERE TUPLE: A { underlying c-ptr read-only } { length fixnum read-only } ; : ( alien len -- direct-array ) A boa ; inline M: A length length>> ; inline M: A nth-unsafe underlying>> NTH call ; inline M: A set-nth-unsafe underlying>> SET-NTH call ; inline M: A like drop dup A instance? [ >A' ] unless ; inline M: A new-sequence drop ; inline M: A byte-length length>> T heap-size * ; inline SYNTAX: A'@ scan-object scan-object parsed ; M: A pprint-delims drop \ A'{ \ } ; M: A >pprint-sequence ; M: A pprint* [ pprint-object ] [ \ A'@ pprint-direct-array ] pprint-c-object ; INSTANCE: A sequence INSTANCE: A S T c-type \ A >>direct-array-class \ >>direct-array-constructor drop ;FUNCTOR