/usr/include/coin/CoinBuild.hpp is in coinor-libcoinutils-dev 2.9.15-3.1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 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
|