/* return a pointer to three plateauType structures, starting at location i,j. caller should check valid field in returned structs. */ nodataType * detectEdgeNodata::getNodataForward(dimension_type i, dimension_type j, dimension_type nr, dimension_type nc) { bool ok; static nodataType ptarr[3]; /* return value */ nodataType pt; ok = nodataQueue->peek(0, &pt); while(ok && (pt.i < i || (pt.i==i && pt.j<j))) { nodataQueue->dequeue(&pt); /* past needing this, so remove */ ok = nodataQueue->peek(0, &pt); } if(ok && pt.i == i && pt.j == j) { nodataQueue->dequeue(&pt); /* found it, so remove */ ptarr[0] = pt; } else { ptarr[0].invalidate(); } /* locate next two, if possible */ for(int kk=0,k=1; k<3; k++) { ok = nodataQueue->peek(kk, &pt); if(ok && pt.i == i && pt.j == j+k) { ptarr[k] = pt; kk++; /* found something, so need to peek further forward */ } else { ptarr[k].invalidate(); } } #if(0) cout << "request at " << i << "," << j << " returns: " << ptarr[0] << ptarr[1] << ptarr[2] << endl; nodataQueue->peek(0, &pt); cout << "queue length = " << nodataQueue->length() << "; head=" << pt << endl; #endif return ptarr; }