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.92 by greg, Wed Apr 16 21:54:15 2025 UTC vs.
Revision 2.94 by greg, Wed Apr 16 22:56:12 2025 UTC

# Line 758 | Line 758 | rmx_transfer_data(RMATRIX *rdst, RMATRIX *rsrc, int do
758   int
759   rmx_transpose(RMATRIX *rm)
760   {
761 #define bmbyte(r,c)     bmap[((r)*rm->ncols+(c))>>3]
762 #define bmbit(r,c)      (1 << ((r)*rm->ncols+(c) & 7))
763 #define bmop(r,c, op)   (bmbyte(r,c) op bmbit(r,c))
764 #define bmtest(r,c)     bmop(r,c,&)
765 #define bmset(r,c)      bmop(r,c,|=)
766 #define bmtestandset(r,c)       (!bmtest(r,c) && bmset(r,c))
761          uby8            *bmap;
762          rmx_dtype       val[MAXCOMP];
763          RMATRIX         dold;
# Line 792 | Line 786 | rmx_transpose(RMATRIX *rm)
786                  }
787                  return(1);
788          }
789 <                                        /* clear completion bitmap */
789 > #define bmbyte(r,c)     bmap[((r)*rm->ncols+(c))>>3]
790 > #define bmbit(r,c)      (1 << ((r)*rm->ncols+(c) & 7))
791 > #define bmop(r,c, op)   (bmbyte(r,c) op bmbit(r,c))
792 > #define bmtest(r,c)     bmop(r,c,&)
793 > #define bmset(r,c)      bmop(r,c,|=)
794 > #define bmtestandset(r,c)       (!bmtest(r,c) && bmset(r,c))
795 >                                        /* create completion bitmap */
796          bmap = (uby8 *)calloc(((size_t)rm->nrows*rm->ncols+7)>>3, 1);
797          if (!bmap)
798                  return(0);
# Line 800 | Line 800 | rmx_transpose(RMATRIX *rm)
800          rm->ncols = dold.nrows; rm->nrows = dold.ncols;
801          for (i = rm->nrows; i--; )
802              for (j = rm->ncols; j--; ) {
803 <                int     i0, j0, i1 = i, j1 = j;
803 >                int     i0, j0;
804 >                int     i1 = i;
805 >                size_t  j1 = j;
806                  if (!bmtestandset(i,j)) continue;
807                  memcpy(val, rmx_val(rm,i,j),
808                          sizeof(rmx_dtype)*rm->ncomp);
809                  for ( ; ; ) {           /* value transpose loop */
810 <                    const rmx_dtype     *src;
811 <                    i0 = i1; j0 = j1;
812 <                    src = rmx_val(&dold, j0, i0);
813 <                    i1 = (src - dold.mtx)/(dold.ncomp*rm->ncols);
814 <                    j1 = (src - dold.mtx)/dold.ncomp % rm->ncols;
810 >                    const rmx_dtype     *ds;
811 >                    i0 = i1; j0 = (int)j1;
812 >                    ds = rmx_val(&dold, j0, i0);
813 >                    j1 = (ds - dold.mtx)/dold.ncomp;
814 >                    i1 = j1 / rm->ncols;
815 >                    j1 -= (size_t)i1*rm->ncols;
816                      if (!bmtestandset(i1,j1)) break;
817 <                    memcpy(rmx_lval(rm,i0,j0), src,
817 >                    memcpy(rmx_lval(rm,i0,j0), ds,
818                                  sizeof(rmx_dtype)*rm->ncomp);
819                  }
820                                          /* close the loop */

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines