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