Fixing insufficient safety in flip and M: column virtual@

db4
Daniel Ehrenberg 2007-12-15 16:20:32 -05:00
parent 34e29cd690
commit c726962a7a
1 changed files with 8 additions and 6 deletions

View File

@ -221,7 +221,8 @@ TUPLE: column seq col ;
C: <column> column C: <column> column
M: column virtual-seq column-seq ; M: column virtual-seq column-seq ;
M: column virtual@ dup column-col -rot column-seq nth ; M: column virtual@
dup column-col -rot column-seq nth bounds-check ;
M: column length column-seq length ; M: column length column-seq length ;
INSTANCE: column virtual-sequence INSTANCE: column virtual-sequence
@ -546,11 +547,6 @@ M: sequence <=>
: all-eq? ( seq -- ? ) [ eq? ] monotonic? ; : all-eq? ( seq -- ? ) [ eq? ] monotonic? ;
: flip ( matrix -- newmatrix )
dup empty? [
dup first length [ <column> dup like ] curry* map
] unless ;
: exchange ( m n seq -- ) : exchange ( m n seq -- )
pick over bounds-check 2drop 2dup bounds-check 2drop pick over bounds-check 2drop 2dup bounds-check 2drop
exchange-unsafe ; exchange-unsafe ;
@ -667,6 +663,12 @@ PRIVATE>
: infimum ( seq -- n ) dup first [ min ] reduce ; : infimum ( seq -- n ) dup first [ min ] reduce ;
: supremum ( seq -- n ) dup first [ max ] reduce ; : supremum ( seq -- n ) dup first [ max ] reduce ;
: flip ( matrix -- newmatrix )
dup empty? [
dup [ length ] map infimum
[ <column> dup like ] curry* map
] unless ;
: sequence-hashcode ( n seq -- x ) : sequence-hashcode ( n seq -- x )
0 -rot [ 0 -rot [
hashcode* >fixnum swap 31 fixnum*fast fixnum+fast hashcode* >fixnum swap 31 fixnum*fast fixnum+fast