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
19 : set-string-nth ( ch n str -- )
21 [ set-string-nth-fast ] [ set-string-nth-slow ] if ; inline
27 over hashcode over hashcode eq?
28 [ sequence= ] [ 2drop f ] if
36 [ ] [ dup rehash-string string-hashcode ] ?if ;
42 [ >fixnum ] dip string-nth ;
44 M: string set-nth-unsafe
45 dup reset-string-hashcode
46 [ >fixnum ] [ >fixnum ] [ ] tri* set-string-nth ;
49 (clone) [ clone ] change-aux ;
51 M: string resize resize-string ;
53 : 1string ( ch -- str ) 1 swap <string> ;
55 : >string ( seq -- str ) "" clone-like ;
57 M: string new-sequence drop 0 <string> ;
59 INSTANCE: string sequence