#ifndef MPFR_MAT_H
#define MPFR_MAT_H
#ifdef MPFR_MAT_INLINES_C
#define MPFR_MAT_INLINE
#else
#define MPFR_MAT_INLINE static inline
#endif
#include "flint.h"
#include <mpfr.h>
#ifdef __cplusplus
extern "C" {
#endif
typedef struct
{
__mpfr_struct * entries;
slong r;
slong c;
flint_bitcnt_t prec;
__mpfr_struct ** rows;
} mpfr_mat_struct;
typedef mpfr_mat_struct mpfr_mat_t[1];
MPFR_MAT_INLINE
__mpfr_struct * mpfr_mat_entry(const mpfr_mat_t mat, slong i, slong j)
{
return mat->rows[i] + j;
}
MPFR_MAT_INLINE
slong mpfr_mat_nrows(const mpfr_mat_t mat)
{
return mat->r;
}
MPFR_MAT_INLINE
slong mpfr_mat_ncols(const mpfr_mat_t mat)
{
return mat->c;
}
void mpfr_mat_init(mpfr_mat_t mat, slong rows, slong cols, mpfr_prec_t prec);
void mpfr_mat_set(mpfr_mat_t mat1, const mpfr_mat_t mat2);
void mpfr_mat_clear(mpfr_mat_t mat);
int mpfr_mat_equal(const mpfr_mat_t mat1, const mpfr_mat_t mat2);
void mpfr_mat_zero(mpfr_mat_t mat);
void mpfr_mat_randtest(mpfr_mat_t mat, flint_rand_t state);
void mpfr_mat_mul_classical(mpfr_mat_t C, const mpfr_mat_t A, const mpfr_mat_t B, mpfr_rnd_t rnd);
#ifdef __cplusplus
}
#endif
#endif