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

Comparing ray/src/rt/data.c (file contents):
Revision 1.5 by greg, Tue Apr 3 17:48:46 1990 UTC vs.
Revision 1.6 by greg, Fri Apr 6 14:12:21 1990 UTC

# Line 55 | Line 55 | char  *dname;
55           *      For irregularly spaced points, the following can be
56           *  substituted for begi endi ni:
57           *
58 <         *              @ ni p0i p1i .. pni
58 >         *              0 0 ni p0i p1i .. pni
59           */
60  
61          if ((dfname = getpath(dname, libpath, R_OK)) == NULL) {
# Line 82 | Line 82 | char  *dname;
82          for (i = 0; i < dp->nd; i++) {
83                  if (fscanf(fp, "%lf %lf %d",
84                                  &dp->dim[i].org, &dp->dim[i].siz,
85 <                                &dp->dim[i].ne) == 3) {
86 <                        dp->dim[i].siz -= dp->dim[i].org;
87 <                        dp->dim[i].p = NULL;
88 <                } else if (fscanf(fp, "@ %d", &dp->dim[i].ne) == 1) {
85 >                                &dp->dim[i].ne) != 3)
86 >                        goto scanerr;
87 >                if (dp->dim[i].ne < 2)
88 >                        goto scanerr;
89 >                asize *= dp->dim[i].ne;
90 >                if ((dp->dim[i].siz -= dp->dim[i].org) == 0) {
91                          dp->dim[i].p = (double *)malloc(dp->dim[i].ne*sizeof(double));
92                          if (dp->dim[i].p == NULL)
93                                  goto memerr;
# Line 100 | Line 102 | char  *dname;
102                          dp->dim[i].siz = dp->dim[i].p[dp->dim[i].ne-1]
103                                                  - dp->dim[i].p[0];
104                  } else
105 <                        goto scanerr;
104 <                if (dp->dim[i].siz == 0.0 || dp->dim[i].ne < 2)
105 <                        goto scanerr;
106 <                asize *= dp->dim[i].ne;
105 >                        dp->dim[i].p = NULL;
106          }
107          if ((dp->arr = (DATATYPE *)malloc(asize*sizeof(DATATYPE))) == NULL)
108                  goto memerr;
# Line 266 | Line 265 | double  *pt;
265   {
266          DATARRAY  sd;
267          int  asize;
268 +        int  lower, upper;
269          register int  i;
270          double  x, y, y0, y1;
271                                          /* set up dimensions for recursion */
# Line 287 | Line 287 | double  *pt;
287                  else if (i > dp->dim[0].ne - 2)
288                          i = dp->dim[0].ne - 2;
289          } else {                                /* unevenly spaced points */
290 <                if (dp->dim[0].siz > 0.0)
291 <                        for (i = 0; i < dp->dim[0].ne; i++)
292 <                                if (pt[0] < dp->dim[0].p[i])
293 <                                        break;
294 <                else
295 <                        for (i = 0; i < dp->dim[0].ne; i++)
296 <                                if (pt[0] >= dp->dim[0].p[i])
297 <                                        break;
298 <                if (i <= 0)
290 >                if (dp->dim[0].siz > 0.0) {
291 >                        lower = 0;
292 >                        upper = dp->dim[0].ne;
293 >                } else {
294 >                        lower = dp->dim[0].ne;
295 >                        upper = 0;
296 >                }
297 >                do {
298 >                        i = (lower + upper) >> 1;
299 >                        if (pt[0] >= dp->dim[0].p[i])
300 >                                lower = i;
301 >                        else if (pt[0] < dp->dim[0].p[i])
302 >                                upper = i;
303 >                } while (i != (lower + upper) >> 1);
304 >                if (i < 0)
305                          i = 0;
306 <                else if (i >= dp->dim[0].ne)
306 >                else if (i > dp->dim[0].ne - 2)
307                          i = dp->dim[0].ne - 2;
302                else
303                        i--;
308                  x = i + (pt[0] - dp->dim[0].p[i]) /
309                                  (dp->dim[0].p[i+1] - dp->dim[0].p[i]);
310          }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines