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 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 eq?
24 [ sequence= ] [ 2drop f ] if
30 nip dup string-hashcode [ ]
31 [ dup rehash-string string-hashcode ] ?if ;
37 >r >fixnum r> string-nth ;
39 M: string set-nth-unsafe
40 dup reset-string-hashcode
41 >r >fixnum >r >fixnum r> r> set-string-nth ;
44 (clone) [ clone ] change-aux ;
46 M: string resize resize-string ;
48 : 1string ( ch -- str ) 1 swap <string> ;
50 : >string ( seq -- str ) "" clone-like ;
52 M: string new-sequence drop 0 <string> ;
54 INSTANCE: string sequence