New sorting comparison operators
parent
2acfc8fe38
commit
3bf3c3ee5a
|
@ -17,6 +17,11 @@ MATH: <= ( x y -- ? ) foldable
|
||||||
MATH: > ( x y -- ? ) foldable
|
MATH: > ( x y -- ? ) foldable
|
||||||
MATH: >= ( x y -- ? ) foldable
|
MATH: >= ( x y -- ? ) foldable
|
||||||
|
|
||||||
|
: after? ( obj1 obj2 -- ? ) <=> 0 > ; inline
|
||||||
|
: before? ( obj1 obj2 -- ? ) <=> 0 < ; inline
|
||||||
|
: after=? ( obj1 obj2 -- ? ) <=> 0 >= ; inline
|
||||||
|
: before=? ( obj1 obj2 -- ? ) <=> 0 <= ; inline
|
||||||
|
|
||||||
MATH: + ( x y -- z ) foldable
|
MATH: + ( x y -- z ) foldable
|
||||||
MATH: - ( x y -- z ) foldable
|
MATH: - ( x y -- z ) foldable
|
||||||
MATH: * ( x y -- z ) foldable
|
MATH: * ( x y -- z ) foldable
|
||||||
|
|
|
@ -11,7 +11,7 @@ unit-test
|
||||||
[ t ] [
|
[ t ] [
|
||||||
100 [
|
100 [
|
||||||
drop
|
drop
|
||||||
100 [ drop 20 random [ drop 1000 random ] map ] map natural-sort [ <=> 0 <= ] monotonic?
|
100 [ drop 20 random [ drop 1000 random ] map ] map natural-sort [ before=? ] monotonic?
|
||||||
] all?
|
] all?
|
||||||
] unit-test
|
] unit-test
|
||||||
|
|
||||||
|
|
|
@ -52,7 +52,7 @@ PRIVATE>
|
||||||
|
|
||||||
: sort-values ( seq -- sortedseq ) [ [ second ] compare ] sort ;
|
: sort-values ( seq -- sortedseq ) [ [ second ] compare ] sort ;
|
||||||
|
|
||||||
: sort-pair ( a b -- c d ) 2dup <=> 0 > [ swap ] when ;
|
: sort-pair ( a b -- c d ) 2dup after? [ swap ] when ;
|
||||||
|
|
||||||
: midpoint ( seq -- elt )
|
: midpoint ( seq -- elt )
|
||||||
[ midpoint@ ] keep nth-unsafe ; inline
|
[ midpoint@ ] keep nth-unsafe ; inline
|
||||||
|
|
|
@ -28,8 +28,8 @@ IN: temporary
|
||||||
|
|
||||||
[ "end" ] [ "Beginning and end" 14 tail ] unit-test
|
[ "end" ] [ "Beginning and end" 14 tail ] unit-test
|
||||||
|
|
||||||
[ t ] [ "abc" "abd" <=> 0 < ] unit-test
|
[ t ] [ "abc" "abd" before? ] unit-test
|
||||||
[ t ] [ "z" "abd" <=> 0 > ] unit-test
|
[ t ] [ "z" "abd" after? ] unit-test
|
||||||
|
|
||||||
[ 0 10 "hello" subseq ] must-fail
|
[ 0 10 "hello" subseq ] must-fail
|
||||||
|
|
||||||
|
|
|
@ -29,10 +29,10 @@ SYMBOL: alarm-thread
|
||||||
notify-alarm-thread ;
|
notify-alarm-thread ;
|
||||||
|
|
||||||
: alarm-expired? ( alarm now -- ? )
|
: alarm-expired? ( alarm now -- ? )
|
||||||
>r alarm-time r> <=> 0 <= ;
|
>r alarm-time r> before=? ;
|
||||||
|
|
||||||
: reschedule-alarm ( alarm -- )
|
: reschedule-alarm ( alarm -- )
|
||||||
dup alarm-time over alarm-interval +dt
|
dup alarm-time over alarm-interval time+
|
||||||
over set-alarm-time
|
over set-alarm-time
|
||||||
register-alarm ;
|
register-alarm ;
|
||||||
|
|
||||||
|
|
|
@ -26,8 +26,8 @@ IN: opengl.capabilities
|
||||||
: version-seq ( version-string -- version-seq )
|
: version-seq ( version-string -- version-seq )
|
||||||
"." split [ string>number ] map ;
|
"." split [ string>number ] map ;
|
||||||
|
|
||||||
: version<=> ( version1 version2 -- n )
|
: version-before? ( version1 version2 -- ? )
|
||||||
swap version-seq swap version-seq <=> ;
|
swap version-seq swap version-seq before=? ;
|
||||||
|
|
||||||
: (gl-version) ( -- version vendor )
|
: (gl-version) ( -- version vendor )
|
||||||
GL_VERSION glGetString " " split1 ;
|
GL_VERSION glGetString " " split1 ;
|
||||||
|
@ -36,7 +36,7 @@ IN: opengl.capabilities
|
||||||
: gl-vendor-version ( -- version )
|
: gl-vendor-version ( -- version )
|
||||||
(gl-version) nip ;
|
(gl-version) nip ;
|
||||||
: has-gl-version? ( version -- ? )
|
: has-gl-version? ( version -- ? )
|
||||||
gl-version version<=> 0 <= ;
|
gl-version version-before? ;
|
||||||
: (make-gl-version-error) ( required-version -- )
|
: (make-gl-version-error) ( required-version -- )
|
||||||
"Required OpenGL version " % % " not supported (" % gl-version % " available)" % ;
|
"Required OpenGL version " % % " not supported (" % gl-version % " available)" % ;
|
||||||
: require-gl-version ( version -- )
|
: require-gl-version ( version -- )
|
||||||
|
@ -51,7 +51,7 @@ IN: opengl.capabilities
|
||||||
: glsl-vendor-version ( -- version )
|
: glsl-vendor-version ( -- version )
|
||||||
(glsl-version) nip ;
|
(glsl-version) nip ;
|
||||||
: has-glsl-version? ( version -- ? )
|
: has-glsl-version? ( version -- ? )
|
||||||
glsl-version version<=> 0 <= ;
|
glsl-version version-before? ;
|
||||||
: require-glsl-version ( version -- )
|
: require-glsl-version ( version -- )
|
||||||
[ has-glsl-version? ]
|
[ has-glsl-version? ]
|
||||||
[ "Required GLSL version " % % " not supported (" % glsl-version % " available)" % ]
|
[ "Required GLSL version " % % " not supported (" % glsl-version % " available)" % ]
|
||||||
|
|
|
@ -53,14 +53,14 @@ TUPLE: avl-node balance ;
|
||||||
DEFER: avl-set
|
DEFER: avl-set
|
||||||
|
|
||||||
: avl-insert ( value key node -- node taller? )
|
: avl-insert ( value key node -- node taller? )
|
||||||
2dup node-key key< left right ? [
|
2dup node-key before? left right ? [
|
||||||
[ node-link avl-set ] keep swap
|
[ node-link avl-set ] keep swap
|
||||||
>r tuck set-node-link r>
|
>r tuck set-node-link r>
|
||||||
[ dup current-side get change-balance balance-insert ] [ f ] if
|
[ dup current-side get change-balance balance-insert ] [ f ] if
|
||||||
] with-side ;
|
] with-side ;
|
||||||
|
|
||||||
: (avl-set) ( value key node -- node taller? )
|
: (avl-set) ( value key node -- node taller? )
|
||||||
2dup node-key key= [
|
2dup node-key = [
|
||||||
-rot pick set-node-key over set-node-value f
|
-rot pick set-node-key over set-node-value f
|
||||||
] [ avl-insert ] if ;
|
] [ avl-insert ] if ;
|
||||||
|
|
||||||
|
|
|
@ -61,10 +61,6 @@ SYMBOL: current-side
|
||||||
#! side is -1 if k1 < k2, 0 if they are equal, or 1 if k1 > k2
|
#! side is -1 if k1 < k2, 0 if they are equal, or 1 if k1 > k2
|
||||||
<=> sgn ;
|
<=> sgn ;
|
||||||
|
|
||||||
: key< ( k1 k2 -- ? ) <=> 0 < ;
|
|
||||||
: key> ( k1 k2 -- ? ) <=> 0 > ;
|
|
||||||
: key= ( k1 k2 -- ? ) <=> zero? ;
|
|
||||||
|
|
||||||
: random-side ( -- side ) left right 2array random ;
|
: random-side ( -- side ) left right 2array random ;
|
||||||
|
|
||||||
: choose-branch ( key node -- key node-left/right )
|
: choose-branch ( key node -- key node-left/right )
|
||||||
|
@ -72,7 +68,7 @@ SYMBOL: current-side
|
||||||
|
|
||||||
: node-at* ( key node -- value ? )
|
: node-at* ( key node -- value ? )
|
||||||
[
|
[
|
||||||
2dup node-key key= [
|
2dup node-key = [
|
||||||
nip node-value t
|
nip node-value t
|
||||||
] [
|
] [
|
||||||
choose-branch node-at*
|
choose-branch node-at*
|
||||||
|
@ -97,8 +93,8 @@ M: tree set-at ( value key tree -- )
|
||||||
|
|
||||||
: valid-node? ( node -- ? )
|
: valid-node? ( node -- ? )
|
||||||
[
|
[
|
||||||
dup dup node-left [ node-key swap node-key key< ] when* >r
|
dup dup node-left [ node-key swap node-key before? ] when* >r
|
||||||
dup dup node-right [ node-key swap node-key key> ] when* r> and swap
|
dup dup node-right [ node-key swap node-key after? ] when* r> and swap
|
||||||
dup node-left valid-node? swap node-right valid-node? and and
|
dup node-left valid-node? swap node-right valid-node? and and
|
||||||
] [ t ] if* ;
|
] [ t ] if* ;
|
||||||
|
|
||||||
|
|
|
@ -256,7 +256,7 @@ M: editor gadget-text* editor-string % ;
|
||||||
} at T{ one-line-elt } or ;
|
} at T{ one-line-elt } or ;
|
||||||
|
|
||||||
: drag-direction? ( loc editor -- ? )
|
: drag-direction? ( loc editor -- ? )
|
||||||
editor-mark* <=> 0 < ;
|
editor-mark* before? ;
|
||||||
|
|
||||||
: drag-selection-caret ( loc editor element -- loc )
|
: drag-selection-caret ( loc editor element -- loc )
|
||||||
>r [ drag-direction? ] 2keep
|
>r [ drag-direction? ] 2keep
|
||||||
|
|
Loading…
Reference in New Issue