| 
									
										
										
										
											2008-01-31 21:11:46 -05:00
										 |  |  | ! Copyright (C) 2003, 2008 Slava Pestov. | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: kernel math.private sequences kernel.private | 
					
						
							| 
									
										
										
										
											2008-01-31 21:11:46 -05:00
										 |  |  | math sequences.private slots.private byte-arrays | 
					
						
							|  |  |  | alien.accessors ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | IN: strings | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | <PRIVATE
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-01-31 21:11:46 -05:00
										 |  |  | : string-hashcode 3 slot ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : set-string-hashcode 3 set-slot ; inline
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : reset-string-hashcode f swap set-string-hashcode ; inline
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : rehash-string ( str -- )
 | 
					
						
							| 
									
										
										
										
											2007-11-21 03:13:23 -05:00
										 |  |  |     1 over sequence-hashcode swap set-string-hashcode ; inline
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | PRIVATE>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: string equal? | 
					
						
							|  |  |  |     over string? [ | 
					
						
							|  |  |  |         over hashcode over hashcode number=
 | 
					
						
							|  |  |  |         [ sequence= ] [ 2drop f ] if
 | 
					
						
							|  |  |  |     ] [ | 
					
						
							|  |  |  |         2drop f
 | 
					
						
							|  |  |  |     ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: string hashcode* | 
					
						
							|  |  |  |     nip dup string-hashcode [ ] | 
					
						
							|  |  |  |     [ dup rehash-string string-hashcode ] ?if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-01 00:00:08 -05:00
										 |  |  | M: string nth-unsafe | 
					
						
							|  |  |  |     >r >fixnum r> string-nth ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-01 00:00:08 -05:00
										 |  |  | M: string set-nth-unsafe | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  |     dup reset-string-hashcode | 
					
						
							| 
									
										
										
										
											2008-02-01 00:00:08 -05:00
										 |  |  |     >r >fixnum >r >fixnum r> r> set-string-nth ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-02-01 17:02:02 -05:00
										 |  |  | M: string clone | 
					
						
							| 
									
										
										
										
											2008-02-02 00:07:19 -05:00
										 |  |  |     (clone) dup string-aux clone over set-string-aux ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: string resize resize-string ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : 1string ( ch -- str ) 1 swap <string> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : >string ( seq -- str ) "" clone-like ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-04-13 13:54:58 -04:00
										 |  |  | M: string new-sequence drop 0 <string> ;
 | 
					
						
							| 
									
										
										
										
											2007-09-20 18:09:08 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | INSTANCE: string sequence |