summaryrefslogtreecommitdiff
path: root/newstructure/thirdparty/linux/include/coin/CbcBranchBase.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'newstructure/thirdparty/linux/include/coin/CbcBranchBase.hpp')
-rw-r--r--newstructure/thirdparty/linux/include/coin/CbcBranchBase.hpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/newstructure/thirdparty/linux/include/coin/CbcBranchBase.hpp b/newstructure/thirdparty/linux/include/coin/CbcBranchBase.hpp
new file mode 100644
index 0000000..56c4261
--- /dev/null
+++ b/newstructure/thirdparty/linux/include/coin/CbcBranchBase.hpp
@@ -0,0 +1,78 @@
+/* $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
+