1 ! Copyright (C) 2003, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel math.private sequences kernel.private
4 math sequences.private slots.private alien.accessors ;
9 : string-hashcode ( str -- n ) 3 slot ; inline
11 : set-string-hashcode ( n str -- ) 3 set-slot ; inline
13 : reset-string-hashcode ( str -- )
14 f swap set-string-hashcode ; inline
16 : rehash-string ( str -- )
17 1 over sequence-hashcode swap set-string-hashcode ; inline
19 : set-string-nth ( ch n string -- )
21 [ set-string-nth-fast ] [ set-string-nth-slow ] if ; inline
27 2dup [ hashcode ] bi@ eq?
28 [ sequence= ] [ 2drop f ] if
36 [ ] [ dup rehash-string string-hashcode ] ?if ;
42 [ >fixnum ] dip string-nth ; inline
44 M: string set-nth-unsafe
45 dup reset-string-hashcode
46 [ >fixnum ] [ >fixnum ] [ ] tri* set-string-nth ; inline
49 (clone) [ clone ] change-aux ; inline
51 M: string resize resize-string ; inline
53 : 1string ( ch -- str ) 1 swap <string> ;
55 : >string ( seq -- str ) "" clone-like ;
57 M: string new-sequence drop 0 <string> ; inline
59 INSTANCE: string sequence