| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | ! Copyright (C) 2007, 2008 Slava Pestov. | 
					
						
							|  |  |  | ! See http://factorcode.org/license.txt for BSD license. | 
					
						
							|  |  |  | USING: kernel kernel.private alien.accessors sequences | 
					
						
							|  |  |  | sequences.private math math.private byte-arrays accessors | 
					
						
							|  |  |  | alien.c-types parser prettyprint.backend ;
 | 
					
						
							|  |  |  | IN: float-arrays | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | TUPLE: float-array | 
					
						
							|  |  |  | { length array-capacity read-only } | 
					
						
							|  |  |  | { underlying byte-array read-only } ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : <float-array> ( n -- float-array )
 | 
					
						
							| 
									
										
										
										
											2008-07-12 22:15:11 -04:00
										 |  |  |     dup "double" <c-array> float-array boa ; inline
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: float-array clone | 
					
						
							|  |  |  |     [ length>> ] [ underlying>> clone ] bi float-array boa ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: float-array length length>> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: float-array nth-unsafe | 
					
						
							| 
									
										
										
										
											2008-07-12 22:15:11 -04:00
										 |  |  |     underlying>> double-nth ;
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: float-array set-nth-unsafe | 
					
						
							| 
									
										
										
										
											2008-07-12 22:15:11 -04:00
										 |  |  |     [ >float ] 2dip underlying>> set-double-nth ;
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : >float-array ( seq -- float-array )
 | 
					
						
							| 
									
										
										
										
											2008-07-12 22:15:11 -04:00
										 |  |  |     T{ float-array } clone-like ; inline
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: float-array like | 
					
						
							|  |  |  |     drop dup float-array? [ >float-array ] unless ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: float-array new-sequence | 
					
						
							|  |  |  |     drop <float-array> ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: float-array equal? | 
					
						
							|  |  |  |     over float-array? [ sequence= ] [ 2drop f ] if ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: float-array resize | 
					
						
							|  |  |  |     [ drop ] [ | 
					
						
							| 
									
										
										
										
											2008-07-12 22:15:11 -04:00
										 |  |  |         [ "double" heap-size * ] [ underlying>> ] bi*
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  |         resize-byte-array | 
					
						
							|  |  |  |     ] 2bi
 | 
					
						
							|  |  |  |     float-array boa ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | M: float-array byte-length length "double" heap-size * ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | INSTANCE: float-array sequence | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | : 1float-array ( x -- array )
 | 
					
						
							| 
									
										
										
										
											2008-08-22 18:38:23 -04:00
										 |  |  |     1 <float-array> [ set-first ] keep ; inline
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : 2float-array ( x y -- array )
 | 
					
						
							| 
									
										
										
										
											2008-08-22 18:38:23 -04:00
										 |  |  |     T{ float-array } 2sequence ; inline
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : 3float-array ( x y z -- array )
 | 
					
						
							| 
									
										
										
										
											2008-08-22 18:38:23 -04:00
										 |  |  |     T{ float-array } 3sequence ; inline
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | : 4float-array ( w x y z -- array )
 | 
					
						
							| 
									
										
										
										
											2008-08-22 18:38:23 -04:00
										 |  |  |     T{ float-array } 4sequence ; inline
 | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2008-08-30 12:46:35 -04:00
										 |  |  | : F{ \ } [ >float-array ] parse-literal ; parsing | 
					
						
							| 
									
										
										
										
											2008-07-02 03:03:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | M: float-array pprint-delims drop \ F{ \ } ;
 | 
					
						
							|  |  |  | M: float-array >pprint-sequence ;
 | 
					
						
							| 
									
										
										
										
											2008-09-06 04:23:54 -04:00
										 |  |  | M: float-array pprint* pprint-object ;
 | 
					
						
							| 
									
										
										
										
											2008-07-12 02:08:30 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  | USING: hints math.vectors arrays ;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | HINTS: vneg { float-array } { array } ;
 | 
					
						
							| 
									
										
										
										
											2008-08-27 17:24:04 -04:00
										 |  |  | HINTS: v*n { float-array float } { array object } ;
 | 
					
						
							|  |  |  | HINTS: n*v { float float-array } { array object } ;
 | 
					
						
							|  |  |  | HINTS: v/n { float-array float } { array object } ;
 | 
					
						
							|  |  |  | HINTS: n/v { float float-array } { object array } ;
 | 
					
						
							| 
									
										
										
										
											2008-07-12 02:08:30 -04:00
										 |  |  | HINTS: v+ { float-array float-array } { array array } ;
 | 
					
						
							|  |  |  | HINTS: v- { float-array float-array } { array array } ;
 | 
					
						
							|  |  |  | HINTS: v* { float-array float-array } { array array } ;
 | 
					
						
							|  |  |  | HINTS: v/ { float-array float-array } { array array } ;
 | 
					
						
							|  |  |  | HINTS: vmax { float-array float-array } { array array } ;
 | 
					
						
							|  |  |  | HINTS: vmin { float-array float-array } { array array } ;
 | 
					
						
							|  |  |  | HINTS: v. { float-array float-array } { array array } ;
 | 
					
						
							|  |  |  | HINTS: norm-sq { float-array } { array } ;
 | 
					
						
							|  |  |  | HINTS: norm { float-array } { array } ;
 | 
					
						
							|  |  |  | HINTS: normalize { float-array } { array } ;
 |