30 mFirstUnconvertedRow(0)
37 mFirstUnconvertedRow(0)
41 for (
size_t i = 0; i <
mRows; ++i, ++pPivot)
49 mRows(nullspaceMatrix.numRows()),
50 mPivot(nullspaceMatrix.numRows()),
51 mFirstUnconvertedRow(0)
53 size_t Cols = nullspaceMatrix.
numCols();
63 for (; pColumn != pColumnEnd; ++pColumn, ++it)
67 (*pColumn)->setIterator(it);
76 std::vector< size_t > NegativeRows;
80 for (i = 0; i <
mRows; ++i, ++pPivot)
87 for (j = 0; j < Cols; ++j, ++pValue)
99 if ((!hasNegative && hasPositive))
108 if (nullspaceMatrix.
size() != 0 &&
120 pColumn = Columns.
array();
122 for (j = 0; j < Cols; ++j, ++pValue, ++pColumn)
152 assert((*it)->getMultiplier() >= 0);
154 if ((*it)->getMultiplier() > 0)
156 (*it)->unsetBit(Index);
198 std::vector< CStepMatrixColumn * > & NegativeColumns,
199 std::vector< CStepMatrixColumn * > & NullColumns)
201 assert(PositiveColumns.empty());
202 assert(NegativeColumns.empty());
203 assert(NullColumns.empty());
211 const C_INT64 & Value = (*it)->getMultiplier();
215 PositiveColumns.push_back(*it);
219 NegativeColumns.push_back(*it);
223 NullColumns.push_back(*it);
227 if (NegativeColumns.empty())
240 std::vector< CStepMatrixColumn * >::iterator it = invalidColumns.begin();
241 std::vector< CStepMatrixColumn * >::iterator
end = invalidColumns.end();
243 for (; it !=
end; ++it)
255 size_t * pIndex = indexes.
array();
256 size_t * pIndexEnd = pIndex + indexes.
size();
258 for (; pIndex != pIndexEnd; ++pIndex)
259 *pIndex =
mPivot[*pIndex];
270 size_t * pIndex = indexes.
array();
271 size_t * pIndexEnd = pIndex + indexes.
size();
276 for (; pIndex != pIndexEnd; ++Bit, ++Index)
278 if (!ZeroSet.
isSet(Bit))
306 C_INT64 * pValue = & nullspaceMatrix(index, 0);
312 for (; it !=
mInsert; ++it, ++pValue, ++pFirstUnconvertedValue)
316 assert(*pValue >= 0);
320 (*it)->unsetBit(Index);
323 *pValue = *pFirstUnconvertedValue;
327 size_t tmp =
mPivot[index];
333 for (; it !=
mInsert; ++it, ++pValue)
337 (*it)->unsetBit(Index);
350 for (; from !=
mInsert; ++from)
354 (*from)->setIterator(to);
366 os << m.
mPivot << std::endl;
373 for (it = m.
begin(); it != end; ++it)
375 os << **it << std::endl;
void removeInvalidColumns(std::vector< CStepMatrixColumn * > &invalidColumns)
void push_front(const C_INT64 &value)
void getUnsetBitIndexes(const CStepMatrixColumn *pColumn, CVector< size_t > &indexes) const
size_t getNumberOfUnsetBits() const
size_t getFirstUnconvertedRow() const
const CZeroSet & getZeroSet() const
void getAllUnsetBitIndexes(const CStepMatrixColumn *pColumn, CVector< size_t > &indexes) const
CStepMatrixColumn *const * const_iterator
void add(CStepMatrixColumn *pColumn)
std::ostream & operator<<(std::ostream &os, const CStepMatrix &m)
void resize(size_t size, const bool ©=false)
size_t mFirstUnconvertedRow
const_iterator begin() const
bool splitColumns(std::vector< CStepMatrixColumn * > &PositiveColumns, std::vector< CStepMatrixColumn * > &NegativeColumns, std::vector< CStepMatrixColumn * > &NullColumns)
size_t getNumUnconvertedRows() const
const_iterator end() const
void removeColumn(CStepMatrixColumn *pColumn)
bool isSet(const CIndex &index) const
void getAllUnsetBitIndexes(CVector< size_t > &indexes) const
virtual size_t size() const
virtual size_t numCols() const
CStepMatrixColumn * addColumn(const CZeroSet &set, const CStepMatrixColumn *pPositive, const CStepMatrixColumn *pNegative)