#ifndef __IPTRIPLETHELPER_HPP__
#define __IPTRIPLETHELPER_HPP__
#include "IpTypes.hpp"
#include "IpException.hpp"
namespace Ipopt
{
DECLARE_STD_EXCEPTION(UNKNOWN_MATRIX_TYPE);
DECLARE_STD_EXCEPTION(UNKNOWN_VECTOR_TYPE);
class Matrix;
class GenTMatrix;
class SymTMatrix;
class DiagMatrix;
class IdentityMatrix;
class ExpansionMatrix;
class ScaledMatrix;
class SymScaledMatrix;
class SumMatrix;
class SumSymMatrix;
class ZeroMatrix;
class ZeroSymMatrix;
class CompoundMatrix;
class CompoundSymMatrix;
class TransposeMatrix;
class ExpandedMultiVectorMatrix;
class Vector;
class IPOPTLIB_EXPORT TripletHelper
{
public:
static Index GetNumberEntries(
const Matrix& matrix
);
static void FillRowCol(
Index n_entries,
const Matrix& matrix,
Index* iRow,
Index* jCol,
Index row_offset = 0,
Index col_offset = 0
);
static void FillValues(
Index n_entries,
const Matrix& matrix,
Number* values
);
static void FillValuesFromVector(
Index dim,
const Vector& vector,
Number* values
);
static void PutValuesInVector(
Index dim,
const Number* values,
Vector& vector
);
private:
static Index GetNumberEntries_(
const SumMatrix& matrix
);
static Index GetNumberEntries_(
const SumSymMatrix& matrix
);
static Index GetNumberEntries_(
const CompoundMatrix& matrix
);
static Index GetNumberEntries_(
const CompoundSymMatrix& matrix
);
static Index GetNumberEntries_(
const TransposeMatrix& matrix
);
static Index GetNumberEntries_(
const ExpandedMultiVectorMatrix& matrix
);
static void FillRowCol_(
Index n_entries,
const GenTMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const GenTMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const SymTMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const SymTMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const DiagMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const DiagMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const IdentityMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const IdentityMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const ExpansionMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const ExpansionMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const SumMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const SumMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const SumSymMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const SumSymMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const CompoundMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const CompoundMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const CompoundSymMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const CompoundSymMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const ScaledMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const ScaledMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const SymScaledMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const SymScaledMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const TransposeMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const TransposeMatrix& matrix,
Number* values
);
static void FillRowCol_(
Index n_entries,
const ExpandedMultiVectorMatrix& matrix,
Index row_offset,
Index col_offset,
Index* iRow,
Index* jCol
);
static void FillValues_(
Index n_entries,
const ExpandedMultiVectorMatrix& matrix,
Number* values
);
};
} #endif