11 char *
formatstr[6]= {
"CM",
"RM",
"CCRB",
"CRRB",
"RCRB",
"RRRB"};
14 char *
diagstr[2] = {
"NonUnit",
"Unit " };
21 #define map_cm(m, n, i, j) ((i) + (j) * (m))
22 #define map_rm(m, n, i, j) ((i) * (n) + (j))
24 int map_CM(
int m,
int n,
int mb,
int nb,
int i,
int j) {
return map_cm(m, n, i, j); }
25 int map_RM(
int m,
int n,
int mb,
int nb,
int i,
int j) {
return map_rm(m, n, i, j); }
26 int map_CCRB(
int m,
int n,
int mb,
int nb,
int i,
int j) {
32 return (
map_cm( m/mb, n/nb, i/mb, j/nb )*mb*nb +
map_cm( mb, nb, i%mb, j%nb) );
35 return ( m0*n0 + ( (j/nb) * (nb*(m%mb)) ) +
map_cm( m%mb, nb, i%mb, j%nb) );
39 return ( m*n0 + ( (i/mb) * (mb*(n%nb)) ) +
map_cm( mb, n%nb, i%mb, j%nb) );
42 return ( m*n0 + (n-n0)*m0 +
map_cm( m%mb, n%nb, i%mb, j%nb) );
45 int map_CRRB(
int m,
int n,
int mb,
int nb,
int i,
int j) {
51 return (
map_cm( m/mb, n/nb, i/mb, j/nb )*mb*nb +
map_rm( mb, nb, i%mb, j%nb) );
54 return ( m0*n0 + ( (j/nb) * (nb*(m%mb)) ) +
map_rm( m%mb, nb, i%mb, j%nb) );
58 return ( m*n0 + ( (i/mb) * (mb*(n%nb)) ) +
map_rm( mb, n%nb, i%mb, j%nb) );
61 return ( m*n0 + (n-n0)*m0 +
map_rm( m%mb, n%nb, i%mb, j%nb) );
64 int map_RCRB(
int m,
int n,
int mb,
int nb,
int i,
int j) {
70 return (
map_rm( m/mb, n/nb, i/mb, j/nb )*mb*nb +
map_cm( mb, nb, i%mb, j%nb) );
73 return ( m0*n + ( (j/nb) * (nb*(m%mb)) ) +
map_cm( m%mb, nb, i%mb, j%nb) );
77 return ( m0*n0 + ( (i/mb) * (mb*(n%nb)) ) +
map_cm( mb, n%nb, i%mb, j%nb) );
80 return ( m*n0 + (n-n0)*m0 +
map_cm( m%mb, n%nb, i%mb, j%nb) );
83 int map_RRRB(
int m,
int n,
int mb,
int nb,
int i,
int j) {
89 return (
map_rm( m/mb, n/nb, i/mb, j/nb )*mb*nb +
map_rm( mb, nb, i%mb, j%nb) );
92 return ( m0*n + ( (j/nb) * (nb*(m%mb)) ) +
map_rm( m%mb, nb, i%mb, j%nb) );
96 return ( m0*n0 + ( (i/mb) * (mb*(n%nb)) ) +
map_rm( mb, n%nb, i%mb, j%nb) );
99 return ( m*n0 + (n-n0)*m0 +
map_rm( m%mb, n%nb, i%mb, j%nb) );