#ifndef SPARSEMAT_H
#define SPARSEMAT_H
/*******************************************************************
 *  Computer Algebra System SINGULAR
 *
 *  sparsmat.h: operations with sparse matrices
 *          (bareis, ...)
 *
 *******************************************************************/


poly sm_Mult(poly, poly, const ring);
void sm_PolyDiv(poly, poly, const ring);
poly sm_MultDiv(poly, poly, const poly, const ring);
void sm_SpecialPolyDiv(poly, poly, const ring);
/* ----------------- macros ------------------ */
/* #define OLD_DIV 1 */

#ifdef OLD_DIV
#define SM_MULT(A,B,C, R) sm_Mult(A,B,R)
#define SM_DIV sm_PolyDiv
#else
#define SM_MULT sm_MultDiv
#define SM_DIV sm_SpecialPolyDiv
#endif

poly sm_CallDet(ideal I, const ring);
void sm_CallBareiss(ideal smat, int x, int y, ideal & M, intvec ** iv, const ring);
ideal sm_CallSolv(ideal I, const ring);

ring sm_RingChange(const ring, long);
void sm_KillModifiedRing(ring r);
long sm_ExpBound(ideal, int, int, int, const ring);
BOOLEAN sm_CheckDet(ideal, int, BOOLEAN, const ring);
#endif
