ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/util/rmatrix.c
(Generate patch)

Comparing ray/src/util/rmatrix.c (file contents):
Revision 2.1 by greg, Sat May 31 05:02:37 2014 UTC vs.
Revision 2.4 by greg, Thu Jul 24 16:28:17 2014 UTC

# Line 173 | Line 173 | rmx_load(const char *fname)
173   #endif
174          dinfo.nrows = dinfo.ncols = dinfo.ncomp = 0;
175          dinfo.dtype = DTascii;
176 <        if (getheader(fp, &get_dminfo, &dinfo) < 0) {
176 >        if (getheader(fp, get_dminfo, &dinfo) < 0) {
177                  fclose(fp);
178                  return(NULL);
179          }
180 <        if ((dinfo.dtype == DTrgbe) | (dinfo.dtype == DTxyze)) {
180 >        if ((dinfo.nrows <= 0) | (dinfo.ncols <= 0)) {
181                  if (!fscnresolu(&dinfo.ncols, &dinfo.nrows, fp)) {
182                          fclose(fp);
183                          return(NULL);
184                  }
185 <                dinfo.ncomp = 3;
185 >                if (dinfo.ncomp <= 0)
186 >                        dinfo.ncomp = 3;
187 >                else if ((dinfo.dtype == DTrgbe) | (dinfo.dtype == DTxyze) &&
188 >                                dinfo.ncomp != 3) {
189 >                        fclose(fp);
190 >                        return(NULL);
191 >                }
192          }
193          dnew = rmx_alloc(dinfo.nrows, dinfo.ncols, dinfo.ncomp);
194          if (dnew == NULL) {
# Line 382 | Line 388 | rmx_copy(const RMATRIX *rm)
388          return(dnew);
389   }
390  
391 < /* Swap rows and columns in the given matrix in situ */
392 < int
393 < rmx_transpose(RMATRIX *rm)
391 > /* Allocate and assign transposed matrix */
392 > RMATRIX *
393 > rmx_transpose(const RMATRIX *rm)
394   {
395 <        RMATRIX dswap;
395 >        RMATRIX *dnew;
396          int     i, j, k;
397  
398          if (rm == NULL)
399                  return(0);
400 <        dswap.nrows = rm->ncols;
401 <        dswap.ncols = rm->nrows;
402 <        dswap.ncomp = rm->ncomp;
403 <        for (i = 1; i < rm->nrows; i++)
404 <            for (j = 0; j < i; j++)
405 <                for (k = rm->ncomp; k--; ) {
406 <                        double  *opp = rm->mtx + rmx_indx(&dswap,j,i,k);
407 <                        double  d = *opp;
402 <                        *opp = rmx_lval(rm,i,j,k);
403 <                        rmx_lval(rm,i,j,k) = d;
404 <                }
405 <        rm->nrows = dswap.nrows;
406 <        rm->ncols = dswap.ncols;
407 <        return(1);
400 >        dnew = rmx_alloc(rm->ncols, rm->nrows, rm->ncomp);
401 >        if (dnew == NULL)
402 >                return(NULL);
403 >        for (i = dnew->nrows; i--; )
404 >            for (j = dnew->ncols; j--; )
405 >                for (k = dnew->ncomp; k--; )
406 >                        rmx_lval(dnew,i,j,k) = rmx_lval(rm,j,i,k);
407 >        return(dnew);
408   }
409  
410   /* Multiply (concatenate) two matrices and allocate the result */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines