ncplane_erase_regions: generalize harder #2181

pull/2198/head
nick black 3 years ago committed by nick black
parent 72757044da
commit e770dbff43

@ -2136,30 +2136,32 @@ int ncplane_erase_region(ncplane* n, int ystart, int xstart, int ylen, int xlen)
logerror("Illegal start of erase (%d, %d)\n", ystart, xstart); logerror("Illegal start of erase (%d, %d)\n", ystart, xstart);
return -1; return -1;
} }
if(ylen == 0){ if(xlen < 0){
ystart = 0; xstart = xstart + xlen + 1;
ylen = ncplane_dim_y(n); xlen = -xlen;
} }else if(xlen == 0){
if(ystart + ylen > ncplane_dim_y(n) || ystart + ylen < -1){
logerror("Illegal y spec for erase (%d, %d)\n", ystart, ylen);
return -1;
}
if(xlen == 0){
xstart = 0; xstart = 0;
xlen = ncplane_dim_x(n); xlen = ncplane_dim_x(n);
} }
if(xstart + xlen > ncplane_dim_x(n) || xstart + xlen < -1){ if(xstart + xlen > ncplane_dim_x(n)){
logerror("Illegal x spec for erase (%d, %d)\n", xstart, xlen); xlen = ncplane_dim_x(n) - xstart;
return -1;
}
if(xlen < 0){
xstart = xstart + xlen;
xlen = -xlen;
} }
if(ylen < 0){ if(ylen < 0){
ystart = ystart + ylen; ystart = ystart + ylen + 1;
ylen = -ylen; ylen = -ylen;
>>>>>>> 4e10ad795 ([ncplane_erase_region] generalize #2181) }else if(ylen == 0){
ystart = 0;
ylen = ncplane_dim_y(n);
}
if(ystart + ylen > ncplane_dim_y(n)){
ylen = ncplane_dim_y(n) - ystart;
}
loginfo("erasing %d/%d - %d/%d\n", ystart, xstart, ystart + ylen, xstart + xlen);
// special-case the full plane erasure, as it's powerfully optimized (O(1))
if(ystart == 0 && xstart == 0 &&
ylen == ncplane_dim_y(n) && xlen == ncplane_dim_x(n)){
ncplane_erase(n);
return 0;
} }
for(int y = ystart ; y < ystart + ylen ; ++y){ for(int y = ystart ; y < ystart + ylen ; ++y){
for(int x = xstart ; x < xstart + xlen ; ++x){ for(int x = xstart ; x < xstart + xlen ; ++x){

Loading…
Cancel
Save