00001
00002
00003 #ifndef CoinBuild_H
00004 #define CoinBuild_H
00005
00006
00007 #include "CoinPragma.hpp"
00008 #include "CoinFinite.hpp"
00009
00010
00023 class CoinBuild {
00024
00025 public:
00028
00029 void addRow(int numberInRow, const int * columns,
00030 const double * elements, double rowLower=-COIN_DBL_MAX,
00031 double rowUpper=COIN_DBL_MAX);
00033 void addColumn(int numberInColumn, const int * rows,
00034 const double * elements,
00035 double columnLower=0.0,
00036 double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0);
00038 inline void addCol(int numberInColumn, const int * rows,
00039 const double * elements,
00040 double columnLower=0.0,
00041 double columnUpper=COIN_DBL_MAX, double objectiveValue=0.0)
00042 { addColumn(numberInColumn, rows, elements, columnLower, columnUpper, objectiveValue);}
00044 inline int numberRows() const
00045 { return (type_==0) ? numberItems_ : numberOther_;}
00047 inline int numberColumns() const
00048 { return (type_==1) ? numberItems_ : numberOther_;}
00050 inline CoinBigIndex numberElements() const
00051 { return numberElements_;}
00054 int row(int whichRow, double & rowLower, double & rowUpper,
00055 const int * & indices, const double * & elements) const;
00059 int currentRow(double & rowLower, double & rowUpper,
00060 const int * & indices, const double * & elements) const;
00062 void setCurrentRow(int whichRow);
00064 int currentRow() const;
00067 int column(int whichColumn,
00068 double & columnLower, double & columnUpper,double & objectiveValue,
00069 const int * & indices, const double * & elements) const;
00073 int currentColumn( double & columnLower, double & columnUpper,double & objectiveValue,
00074 const int * & indices, const double * & elements) const;
00076 void setCurrentColumn(int whichColumn);
00078 int currentColumn() const;
00080 inline int type() const
00081 { return type_;}
00083
00084
00088 CoinBuild();
00090 CoinBuild(int type);
00092 ~CoinBuild();
00094
00098 CoinBuild(const CoinBuild&);
00100 CoinBuild& operator=(const CoinBuild&);
00102 private:
00104 void setMutableCurrent(int which) const;
00106 void addItem(int numberInItem, const int * indices,
00107 const double * elements,
00108 double itemLower,
00109 double itemUpper, double objectiveValue);
00112 int item(int whichItem,
00113 double & itemLower, double & itemUpper,double & objectiveValue,
00114 const int * & indices, const double * & elements) const;
00118 int currentItem( double & itemLower, double & itemUpper,double & objectiveValue,
00119 const int * & indices, const double * & elements) const;
00121 void setCurrentItem(int whichItem);
00123 int currentItem() const;
00124
00125 private:
00128
00129 int numberItems_;
00131 int numberOther_;
00133 CoinBigIndex numberElements_;
00135 mutable double * currentItem_;
00137 double * firstItem_;
00139 double * lastItem_;
00141 int type_;
00143 };
00144
00145 #endif