78 #include <jasper/jas_config.h>    80 #include <jasper/jas_stream.h>    81 #include <jasper/jas_types.h>    83 #include <jasper/jas_math.h>    94 #define JAS_MATRIX_REF  0x0001   101 typedef int_fast32_t jas_seqent_t;
   104 typedef int_fast32_t jas_matent_t;
   106 typedef int_fast32_t jas_matind_t;
   116         jas_matind_t xstart_;
   119         jas_matind_t ystart_;
   128         jas_matind_t numrows_;
   131         jas_matind_t numcols_;
   134         jas_seqent_t **rows_;
   137         int_fast32_t maxrows_;
   143         int_fast32_t datasize_;
   147 typedef jas_matrix_t jas_seq2d_t;
   148 typedef jas_matrix_t jas_seq_t;
   155 #define jas_matrix_numrows(matrix) \   159 #define jas_matrix_numcols(matrix) \   162 #define jas_matrix_size(matrix) \   163         (jas_matrix_width(matrix) * jas_matrix_height(matrix))   166 #define jas_matrix_get(matrix, i, j) \   167         ((matrix)->rows_[i][j])   170 #define jas_matrix_set(matrix, i, j, v) \   171         ((matrix)->rows_[i][j] = (v))   174 #define jas_matrix_getv(matrix, i) \   175         (((matrix)->numrows_ == 1) ? ((matrix)->rows_[0][i]) : \   176           ((matrix)->rows_[i][0]))   179 #define jas_matrix_setv(matrix, i, v) \   180         (((matrix)->numrows_ == 1) ? ((matrix)->rows_[0][i] = (v)) : \   181           ((matrix)->rows_[i][0] = (v)))   184 #define jas_matrix_getref(matrix, i, j) \   185         (&(matrix)->rows_[i][j])   187 #define jas_matrix_getvref(matrix, i) \   188         (((matrix)->numrows_ > 1) ? jas_matrix_getref(matrix, i, 0) : \   189           jas_matrix_getref(matrix, 0, i))   191 #define jas_matrix_length(matrix) \   192         (max((matrix)->numrows_, (matrix)->numcols_))   195 JAS_DLLEXPORT jas_matrix_t *jas_matrix_create(jas_matind_t numrows, jas_matind_t numcols);
   198 JAS_DLLEXPORT 
void jas_matrix_destroy(jas_matrix_t *matrix);
   201 JAS_DLLEXPORT 
int jas_matrix_resize(jas_matrix_t *matrix, jas_matind_t numrows, jas_matind_t numcols);
   203 JAS_DLLEXPORT 
int jas_matrix_output(jas_matrix_t *matrix, FILE *out);
   206 JAS_DLLEXPORT 
void jas_matrix_bindsub(jas_matrix_t *mat0, jas_matrix_t *mat1, jas_matind_t r0,
   207   jas_matind_t c0, jas_matind_t r1, jas_matind_t c1);
   210 #define jas_matrix_bindrow(mat0, mat1, r) \   211   (jas_matrix_bindsub((mat0), (mat1), (r), 0, (r), (mat1)->numcols_ - 1))   214 #define jas_matrix_bindcol(mat0, mat1, c) \   215   (jas_matrix_bindsub((mat0), (mat1), 0, (c), (mat1)->numrows_ - 1, (c)))   218 JAS_DLLEXPORT 
void jas_matrix_clip(jas_matrix_t *matrix, jas_seqent_t minval,
   219   jas_seqent_t maxval);
   222 JAS_DLLEXPORT 
void jas_matrix_asl(jas_matrix_t *matrix, 
int n);
   225 JAS_DLLEXPORT 
void jas_matrix_asr(jas_matrix_t *matrix, 
int n);
   228 JAS_DLLEXPORT 
void jas_matrix_divpow2(jas_matrix_t *matrix, 
int n);
   231 JAS_DLLEXPORT 
void jas_matrix_setall(jas_matrix_t *matrix, jas_seqent_t val);
   234 #define jas_matrix_rowstep(matrix) \   235         (((matrix)->numrows_ > 1) ? ((matrix)->rows_[1] - (matrix)->rows_[0]) : (0))   238 #define jas_matrix_step(matrix) \   239         (((matrix)->numrows_ > 1) ? (jas_matrix_rowstep(matrix)) : (1))   242 JAS_DLLEXPORT 
int jas_matrix_cmp(jas_matrix_t *mat0, jas_matrix_t *mat1);
   244 JAS_DLLEXPORT jas_matrix_t *jas_matrix_copy(jas_matrix_t *x);
   246 JAS_DLLEXPORT jas_matrix_t *jas_matrix_input(FILE *);
   248 #define jas_seqent_asl jas_fast32_asl   249 #define jas_seqent_asr jas_fast32_asr   255 JAS_DLLEXPORT jas_seq2d_t *jas_seq2d_copy(jas_seq2d_t *x);
   257 JAS_DLLEXPORT jas_matrix_t *jas_seq2d_create(jas_matind_t xstart, jas_matind_t ystart,
   258   jas_matind_t xend, jas_matind_t yend);
   260 #define jas_seq2d_destroy(s) \   261         jas_matrix_destroy(s)   263 #define jas_seq2d_xstart(s) \   265 #define jas_seq2d_ystart(s) \   267 #define jas_seq2d_xend(s) \   269 #define jas_seq2d_yend(s) \   271 #define jas_seq2d_getref(s, x, y) \   272         (jas_matrix_getref(s, (y) - (s)->ystart_, (x) - (s)->xstart_))   273 #define jas_seq2d_get(s, x, y) \   274         (jas_matrix_get(s, (y) - (s)->ystart_, (x) - (s)->xstart_))   275 #define jas_seq2d_rowstep(s) \   276         jas_matrix_rowstep(s)   277 #define jas_seq2d_width(s) \   278         ((s)->xend_ - (s)->xstart_)   279 #define jas_seq2d_height(s) \   280         ((s)->yend_ - (s)->ystart_)   281 #define jas_seq2d_setshift(s, x, y) \   282         ((s)->xstart_ = (x), (s)->ystart_ = (y), \   283           (s)->xend_ = (s)->xstart_ + (s)->numcols_, \   284           (s)->yend_ = (s)->ystart_ + (s)->numrows_)   285 #define jas_seq2d_size(s) \   286         (jas_seq2d_width(s) * jas_seq2d_height(s))   288 JAS_DLLEXPORT 
void jas_seq2d_bindsub(jas_matrix_t *s, jas_matrix_t *s1, jas_matind_t xstart,
   289   jas_matind_t ystart, jas_matind_t xend, jas_matind_t yend);
   295 #define jas_seq_create(start, end) \   296         (jas_seq2d_create(start, 0, end, 1))   298 #define jas_seq_destroy(seq) \   299         (jas_seq2d_destroy(seq))   301 #define jas_seq_set(seq, i, v) \   302         ((seq)->rows_[0][(i) - (seq)->xstart_] = (v))   303 #define jas_seq_getref(seq, i) \   304         (&(seq)->rows_[0][(i) - (seq)->xstart_])   305 #define jas_seq_get(seq, i) \   306         ((seq)->rows_[0][(i) - (seq)->xstart_])   307 #define jas_seq_start(seq) \   309 #define jas_seq_end(seq) \