67 lines
1.5 KiB
Factor
67 lines
1.5 KiB
Factor
! Copyright (C) 2008, 2009 Slava Pestov.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
USING: math math.order math.intervals assocs combinators ;
|
|
IN: compiler.tree.comparisons
|
|
|
|
! Some utilities for working with comparison operations.
|
|
|
|
CONSTANT: comparison-ops { < > <= >= u< u> u<= u>= }
|
|
|
|
CONSTANT: generic-comparison-ops { before? after? before=? after=? }
|
|
|
|
: assumption ( i1 i2 op -- i3 )
|
|
{
|
|
{ \ < [ assume< ] }
|
|
{ \ > [ assume> ] }
|
|
{ \ <= [ assume<= ] }
|
|
{ \ >= [ assume>= ] }
|
|
{ \ u< [ assume< ] }
|
|
{ \ u> [ assume> ] }
|
|
{ \ u<= [ assume<= ] }
|
|
{ \ u>= [ assume>= ] }
|
|
} case ;
|
|
|
|
: interval-comparison ( i1 i2 op -- result )
|
|
{
|
|
{ \ < [ interval< ] }
|
|
{ \ > [ interval> ] }
|
|
{ \ <= [ interval<= ] }
|
|
{ \ >= [ interval>= ] }
|
|
{ \ u< [ interval< ] }
|
|
{ \ u> [ interval> ] }
|
|
{ \ u<= [ interval<= ] }
|
|
{ \ u>= [ interval>= ] }
|
|
} case ;
|
|
|
|
: swap-comparison ( op -- op' )
|
|
{
|
|
{ < > }
|
|
{ > < }
|
|
{ <= >= }
|
|
{ >= <= }
|
|
{ u< u> }
|
|
{ u> u< }
|
|
{ u<= u>= }
|
|
{ u>= u<= }
|
|
} at ;
|
|
|
|
: negate-comparison ( op -- op' )
|
|
{
|
|
{ < >= }
|
|
{ > <= }
|
|
{ <= > }
|
|
{ >= < }
|
|
{ u< u>= }
|
|
{ u> u<= }
|
|
{ u<= u> }
|
|
{ u>= u< }
|
|
} at ;
|
|
|
|
: specific-comparison ( op -- op' )
|
|
{
|
|
{ before? < }
|
|
{ after? > }
|
|
{ before=? <= }
|
|
{ after=? >= }
|
|
} at ;
|