1 ! Copyright (C) 2003, 2008 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel math.private sequences kernel.private
4 math sequences.private slots.private byte-arrays
10 : string-hashcode 3 slot ; inline
12 : set-string-hashcode 3 set-slot ; inline
14 : reset-string-hashcode f swap set-string-hashcode ; inline
16 : rehash-string ( str -- )
17 1 over sequence-hashcode swap set-string-hashcode ; inline
23 over hashcode over hashcode number=
24 [ sequence= ] [ 2drop f ] if
30 nip dup string-hashcode [ ]
31 [ dup rehash-string string-hashcode ] ?if ;
34 >r >fixnum r> string-nth ;
36 M: string set-nth-unsafe
37 dup reset-string-hashcode
38 >r >fixnum >r >fixnum r> r> set-string-nth ;
41 (clone) dup string-aux clone over set-string-aux ;
43 M: string resize resize-string ;
45 : 1string ( ch -- str ) 1 swap <string> ;
47 : >string ( seq -- str ) "" clone-like ;
49 M: string new-sequence drop 0 <string> ;
51 INSTANCE: string sequence