# presolvehlink Class Reference

Links to aid in packed matrix modification. More...

`#include <CoinPresolveMatrix.hpp>`

Collaboration diagram for presolvehlink:
[legend]

List of all members.

## Public Attributes
int | pre
int | suc
## Related Functions
(Note that these are not member functions.)
void | PRESOLVE_REMOVE_LINK (presolvehlink *link, int i)
| unlink vector i
void | PRESOLVE_INSERT_LINK (presolvehlink *link, int i, int j)
| insert vector i after vector j
void | PRESOLVE_MOVE_LINK (presolvehlink *link, int i, int j)
| relink vector j in place of vector i

## Detailed Description

Links to aid in packed matrix modification.

Currently, the matrices held by the CoinPrePostsolveMatrix and CoinPresolveMatrix objects are represented in the same way as a CoinPackedMatrix. In the course of presolve and postsolve transforms, it will happen that a major-dimension vector needs to increase in size. In order to check whether there is enough room to add another coefficient in place, it helps to know the next vector (in memory order) in the bulk storage area. To do that, a linked list of major-dimension vectors is maintained; the "pre" and "suc" fields give the previous and next vector, in memory order (that is, the vector whose mcstrt_ or mrstrt_ entry is next smaller or larger).

Consider a column-major matrix with ncols columns. By definition, presolvehlink[ncols].pre points to the column in the last occupied position of the bulk storage arrays. There is no easy way to find the column which occupies the first position (there is no presolvehlink[-1] to consult). If the column that initially occupies the first position is moved for expansion, there is no way to reclaim the space until the bulk storage is compacted. The same holds for the last and first rows of a row-major matrix, of course.

Definition at line 738 of file CoinPresolveMatrix.hpp.

## Friends And Related Function Documentation

void PRESOLVE_REMOVE_LINK | ( | presolvehlink * | link,
|  | int | i |
| ) |  |  | `[related]`

unlink vector i

Remove vector i from the ordering.

Definition at line 750 of file CoinPresolveMatrix.hpp.

void PRESOLVE_INSERT_LINK | ( | presolvehlink * | link,
|  | int | i,
|  | int | j |
| ) |  |  | `[related]`

insert vector i after vector j

Insert vector i between j and j.suc.

Definition at line 768 of file CoinPresolveMatrix.hpp.

void PRESOLVE_MOVE_LINK | ( | presolvehlink * | link,
|  | int | i,
|  | int | j |
| ) |  |  | `[related]`

relink vector j in place of vector i

Replace vector i in the ordering with vector j. This is equivalent to

         int pre = link[i].pre;
         PRESOLVE_REMOVE_LINK(link,i);
         PRESOLVE_INSERT_LINK(link,j,pre);

But, this routine will work even if i happens to be first in the order.

Definition at line 790 of file CoinPresolveMatrix.hpp.

## Member Data Documentation

int presolvehlink::pre

Definition at line 740 of file CoinPresolveMatrix.hpp.

int presolvehlink::suc

Definition at line 740 of file CoinPresolveMatrix.hpp.

The documentation for this class was generated from the following file:

- /home/coin/svn-release/CoinUtils-2.10.9/CoinUtils/src/CoinPresolveMatrix.hpp

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines