home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Los Alamos National Laboratory
/
LANL_CD.ISO
/
software
/
compres
/
src
/
tpose.c
< prev
next >
Wrap
C/C++ Source or Header
|
1991-11-15
|
1KB
|
68 lines
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;
}