summaryrefslogtreecommitdiff
path: root/thirdparty/linux/include/coin1/CoinBuild.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty/linux/include/coin1/CoinBuild.hpp')
-rw-r--r--thirdparty/linux/include/coin1/CoinBuild.hpp149
1 files changed, 149 insertions, 0 deletions
diff --git a/thirdparty/linux/include/coin1/CoinBuild.hpp b/thirdparty/linux/include/coin1/CoinBuild.hpp
new file mode 100644
index 0000000..770c269
--- /dev/null
+++ b/thirdparty/linux/include/coin1/CoinBuild.hpp
@@ -0,0 +1,149 @@
+/* $Id: CoinBuild.hpp 1416 2011-04-17 09:57:29Z stefan $ */
+// Copyright (C) 2005, International Business Machines
+// Corporation and others. All Rights Reserved.
+// This code is licensed under the terms of the Eclipse Public License (EPL).
+
+#ifndef CoinBuild_H
+#define CoinBuild_H
+
+
+#include "CoinPragma.hpp"
+#include "CoinTypes.hpp"
+#include "CoinFinite.hpp"
+
+
+/**
+ In many cases it is natural to build a model by adding one row at a time. In Coin this
+ is inefficient so this class gives some help. An instance of CoinBuild can be built up
+ more efficiently and then added to the Clp/OsiModel in one go.
+
+ It may be more efficient to have fewer arrays and re-allocate them but this should
+ give a large gain over addRow.
+
+ I have now extended it to columns.
+
+*/
+
+class CoinBuild {
+
+public:
+ /**@name Useful methods */
+ //@{
+ /// add a row
+ void addRow(int numberInRow, const int * columns,
+ const double * elements, double rowLower=-COIN_DBL_MAX,
+ double rowUpper=COIN_DBL_MAX);
+ /// add a column
+ void addColumn(int numberInColumn, const int * rows,
+ const double * elements,
+ double columnLower=0.0,
+ double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0);
+ /// add a column
+ inline void addCol(int numberInColumn, const int * rows,
+ const double * elements,
+ double columnLower=0.0,
+ double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0)
+ { addColumn(numberInColumn, rows, elements, columnLower, columnUpper, objectiveValue);}
+ /// Return number of rows or maximum found so far
+ inline int numberRows() const
+ { return (type_==0) ? numberItems_ : numberOther_;}
+ /// Return number of columns or maximum found so far
+ inline int numberColumns() const
+ { return (type_==1) ? numberItems_ : numberOther_;}
+ /// Return number of elements
+ inline CoinBigIndex numberElements() const
+ { return numberElements_;}
+ /** Returns number of elements in a row and information in row
+ */
+ int row(int whichRow, double & rowLower, double & rowUpper,
+ const int * & indices, const double * & elements) const;
+ /** Returns number of elements in current row and information in row
+ Used as rows may be stored in a chain
+ */
+ int currentRow(double & rowLower, double & rowUpper,
+ const int * & indices, const double * & elements) const;
+ /// Set current row
+ void setCurrentRow(int whichRow);
+ /// Returns current row number
+ int currentRow() const;
+ /** Returns number of elements in a column and information in column
+ */
+ int column(int whichColumn,
+ double & columnLower, double & columnUpper,double & objectiveValue,
+ const int * & indices, const double * & elements) const;
+ /** Returns number of elements in current column and information in column
+ Used as columns may be stored in a chain
+ */
+ int currentColumn( double & columnLower, double & columnUpper,double & objectiveValue,
+ const int * & indices, const double * & elements) const;
+ /// Set current column
+ void setCurrentColumn(int whichColumn);
+ /// Returns current column number
+ int currentColumn() const;
+ /// Returns type
+ inline int type() const
+ { return type_;}
+ //@}
+
+
+ /**@name Constructors, destructor */
+ //@{
+ /** Default constructor. */
+ CoinBuild();
+ /** Constructor with type 0==for addRow, 1== for addColumn. */
+ CoinBuild(int type);
+ /** Destructor */
+ ~CoinBuild();
+ //@}
+
+ /**@name Copy method */
+ //@{
+ /** The copy constructor. */
+ CoinBuild(const CoinBuild&);
+ /// =
+ CoinBuild& operator=(const CoinBuild&);
+ //@}
+private:
+ /// Set current
+ void setMutableCurrent(int which) const;
+ /// add a item
+ void addItem(int numberInItem, const int * indices,
+ const double * elements,
+ double itemLower,
+ double itemUpper, double objectiveValue);
+ /** Returns number of elements in a item and information in item
+ */
+ int item(int whichItem,
+ double & itemLower, double & itemUpper,double & objectiveValue,
+ const int * & indices, const double * & elements) const;
+ /** Returns number of elements in current item and information in item
+ Used as items may be stored in a chain
+ */
+ int currentItem( double & itemLower, double & itemUpper,double & objectiveValue,
+ const int * & indices, const double * & elements) const;
+ /// Set current item
+ void setCurrentItem(int whichItem);
+ /// Returns current item number
+ int currentItem() const;
+
+private:
+ /**@name Data members */
+ //@{
+ /// Current number of items
+ int numberItems_;
+ /// Current number of other dimension i.e. Columns if addRow (i.e. max)
+ int numberOther_;
+ /// Current number of elements
+ CoinBigIndex numberElements_;
+ /// Current item pointer
+ mutable double * currentItem_;
+ /// First item pointer
+ double * firstItem_;
+ /// Last item pointer
+ double * lastItem_;
+ /// Type of build - 0 for row, 1 for column, -1 unset
+ int type_;
+ //@}
+};
+
+#endif