| 174 |
|
protected: |
| 175 |
|
static RayReportCall RctCall; // our callback for traced rays |
| 176 |
|
ABitMap rowsDone; // bit mask of completed rows |
| 177 |
+ |
mutable uint32 nrDone; // current contiguous #rows done |
| 178 |
|
uint32 rInPos; // which row (record) is next on input? |
| 179 |
|
uby8 nChan; // NCSAMP setting for this calculation |
| 180 |
|
char dtyp; // data type ('f', 'd', or 'c') |
| 196 |
|
uint32 accum; // # rays to accumulate per record |
| 197 |
|
RcontribSimulManager(const char *octn = NULL) |
| 198 |
|
: RtraceSimulManager(NULL, NULL, octn) { |
| 199 |
< |
rInPos = 0; |
| 199 |
> |
nrDone = rInPos = 0; |
| 200 |
|
nChan = 0; |
| 201 |
|
dtyp = 'f'; |
| 202 |
|
dsiz = 0; |
| 310 |
|
} |
| 311 |
|
/// Get # rows completed |
| 312 |
|
int GetRowFinished() const { |
| 313 |
< |
if (!nkids) return rInPos; |
| 314 |
< |
uint32 nDone = rowsDone.Find(0, false); |
| 315 |
< |
if (nDone == ABMend) |
| 316 |
< |
return rowsDone.Length(); |
| 317 |
< |
return nDone; |
| 313 |
> |
if (!nkids) return nrDone = rInPos; |
| 314 |
> |
nrDone = rowsDone.Find(nrDone, false); |
| 315 |
> |
if (nrDone == ABMend) |
| 316 |
> |
nrDone = rowsDone.Length(); |
| 317 |
> |
return nrDone; |
| 318 |
|
} |
| 319 |
|
/// Add a ray/bundle to compute next record (n=accum) |
| 320 |
|
int ComputeRecord(const FVECT orig_direc[]); |
| 332 |
|
if (rowsDone.Length()) { |
| 333 |
|
SetThreadCount(1); |
| 334 |
|
rowsDone.NewBitMap(0); |
| 335 |
< |
rInPos = 0; |
| 335 |
> |
nrDone = rInPos = 0; |
| 336 |
|
} |
| 337 |
|
lu_done(&modLUT); |
| 338 |
|
delete outList; outList = NULL; |