51 lines
1.1 KiB
Factor
51 lines
1.1 KiB
Factor
! Copyright (C) 2008 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 { < > <= >= }
|
|
|
|
CONSTANT: generic-comparison-ops { before? after? before=? after=? }
|
|
|
|
: assumption ( i1 i2 op -- i3 )
|
|
{
|
|
{ \ < [ assume< ] }
|
|
{ \ > [ assume> ] }
|
|
{ \ <= [ assume<= ] }
|
|
{ \ >= [ assume>= ] }
|
|
} case ;
|
|
|
|
: interval-comparison ( i1 i2 op -- result )
|
|
{
|
|
{ \ < [ interval< ] }
|
|
{ \ > [ interval> ] }
|
|
{ \ <= [ interval<= ] }
|
|
{ \ >= [ interval>= ] }
|
|
} case ;
|
|
|
|
: swap-comparison ( op -- op' )
|
|
{
|
|
{ < > }
|
|
{ > < }
|
|
{ <= >= }
|
|
{ >= <= }
|
|
} at ;
|
|
|
|
: negate-comparison ( op -- op' )
|
|
{
|
|
{ < >= }
|
|
{ > <= }
|
|
{ <= > }
|
|
{ >= < }
|
|
} at ;
|
|
|
|
: specific-comparison ( op -- op' )
|
|
{
|
|
{ before? < }
|
|
{ after? > }
|
|
{ before=? <= }
|
|
{ after=? >= }
|
|
} at ;
|