size_t dcesafeindex(DCEsegment* seg, size_t start, size_t stop) { size_t safe; if(!seg->slicesdefined) return stop; /* actually, we don't know */ if(stop == 0) return stop; /* watch out because safe is unsigned */ for(safe=stop-1;safe>start;safe--) { if(!dceiswholeslice(&seg->slices[safe])) return safe+1; } return dceiswholeslice(&seg->slices[start]) ? start /*every slice is safe*/ : start+1 ; }
int dceiswholesegment(DCEsegment* seg) { int i,whole; if(!seg->slicesdefined) return 0; /* actually, we don't know */ whole = 1; /* assume so */ for(i=0;i<seg->rank;i++) { if(!dceiswholeslice(&seg->slices[i])) {whole = 0; break;} } return whole; }