HEX
Server: Apache/2.4.18 (Ubuntu)
System: Linux ubuntu 7.0.5-x86_64-linode173 #1 SMP PREEMPT_DYNAMIC Fri May 8 10:12:05 EDT 2026 x86_64
User: root (0)
PHP: 7.2.28-1+ubuntu16.04.1+deb.sury.org+1
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,
Upload Files
File: //proc/thread-self/root/usr/include/coin/CbcBranchBase.hpp
/* $Id: CbcBranchBase.hpp 1573 2011-01-05 01:12:36Z lou $ */
// Copyright (C) 2002, International Business Machines
// Corporation and others.  All Rights Reserved.
// This code is licensed under the terms of the Eclipse Public License (EPL).

#ifndef CbcBranchBase_H
#define CbcBranchBase_H

#include <string>
#include <vector>
#include "OsiBranchingObject.hpp"

enum CbcRangeCompare {
    CbcRangeSame,
    CbcRangeDisjoint,
    CbcRangeSubset,
    CbcRangeSuperset,
    CbcRangeOverlap
};

#include "CbcObject.hpp"
#include "CbcBranchingObject.hpp"
#include "CbcBranchDecision.hpp"
#include "CbcConsequence.hpp"
#include "CbcObjectUpdateData.hpp"

//##############################################################################

/** Compare two ranges. The two bounds arrays are both of size two and
    describe closed intervals. Return the appropriate CbcRangeCompare value
    (first argument being the sub/superset if that's the case). In case of
    overlap (and if \c replaceIfOverlap is true) replace the content of thisBd
    with the intersection of the ranges.
*/
static inline CbcRangeCompare
CbcCompareRanges(double* thisBd, const double* otherBd,
                 const bool replaceIfOverlap)
{
    const double lbDiff = thisBd[0] - otherBd[0];
    if (lbDiff < 0) { // lb of this < lb of other
        if (thisBd[1] >= otherBd[1]) { // ub of this >= ub of other
            return CbcRangeSuperset;
        } else if (thisBd[1] < otherBd[0]) {
            return CbcRangeDisjoint;
        } else {
            // overlap
            if (replaceIfOverlap) {
                thisBd[0] = otherBd[0];
            }
            return CbcRangeOverlap;
        }
    } else if (lbDiff > 0) { // lb of this > lb of other
        if (thisBd[1] <= otherBd[1]) { // ub of this <= ub of other
            return CbcRangeSubset;
        } else if (thisBd[0] > otherBd[1]) {
            return CbcRangeDisjoint;
        } else {
            // overlap
            if (replaceIfOverlap) {
                thisBd[1] = otherBd[1];
            }
            return CbcRangeOverlap;
        }
    } else { // lb of this == lb of other
        if (thisBd[1] == otherBd[1]) {
            return CbcRangeSame;
        }
        return thisBd[1] < otherBd[1] ? CbcRangeSubset : CbcRangeSuperset;
    }

    return CbcRangeSame; // fake return

}

//#############################################################################

#endif