Example #1
0
//Returns intersection interval if it exist, NULL if there is no.
bool Interval::intersect(interval_t result, interval_t interval1, interval_t interval2) {

    double  x1 = INTERVAL_X1(interval1),
            x2 = INTERVAL_X2(interval1),
            y1 = INTERVAL_X1(interval2),
            y2 = INTERVAL_X2(interval2);
    if(x1 > y2) {
        result->null();
        return false;
    }
    if(x1 < y1) {
        if(x2 < y1) {
            result->null();
            return false;
        }
        if(x2 > y2)
            newInterval(result, y1, y2);
        else
            newInterval(result, y1, x2);
    } else if(x2 < y2) // [x1,x2] in [y1,y2]
        newInterval(result, x1, x2);
    else
        newInterval(result, x1, y2);
    
    return true;
}