home *** CD-ROM | disk | FTP | other *** search
- tpose(x, n, m)
- int n, m;
- float **x;
- {
- if(n == m)
- tpose1(x, n);
- else
- tpose2(x, n, m);
- }
-
- /****************************************************************/
-
- tpose1(a, n)
- register int n;
- float **a;
- {
- float temp;
- register int np1;
- register float *pend, *pij, *pji, *pij_o, *pji_o;
-
- np1 = n + 1;
- pend = *a + n*n;
- pij_o = *a + n;
- pji_o = *a + 1;
- while (pij_o < pend) {
- pij = pij_o;
- pji = pji_o;
- while (pij < pend) {
- temp = *pij;
- *pij = *pji;
- *pji++ = temp;
- pij += n;
- }
- pij_o += np1;
- pji_o += np1;
- }
- }
-
- /****************************************************************/
-
- tpose2(a, n, m)
- register int n, m;
- float **a;
- {
- float *bsave;
- register float *max1, *max2, *aptr, *b, *bptr;
-
- aptr = *a;
- b = bptr = bsave = (float*)malloc(n*m*sizeof(float));
- if(!b) {
- printf("ERROR: Not enough room for malloc\n");
- exit(-1);
- }
-
- max1 = aptr + n*m;
- while(aptr < max1) {
- bptr = b++;
- max2 = aptr + m;
- while(aptr < max2) {
- *bptr = *aptr++;
- bptr += n;
- }
- }
-
- free(*a);
- *a = bsave;
- }
-