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) \