Warning: session_start(): open(/var/lib/php/sessions/sess_khdv904hnhida8bjq6qe40st7j, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
persistable sclass ScanlineBitMatrix extends AbstractMatrix is BitMatrix {
int bx1 = -1, by1, bx2, by2; // bounding box of positive bits
// format for each line: start x, end x (excl.), start x, end x, ...
new IntBuffer scanlineData;
// pointer into scanlineData for each line
new IntBuffer scanlineStarts;
*(BitMatrix matrix) {
super(matrix.getWidth(), matrix.getHeight());
int ptr = 0;
for y to h: {
scanlineStarts.add(ptr));
}
}
public Bool get(int x, int y) {
if (x < bx1 || y < by1 || x >= bx2 || x >= by2) false;
int ptr = scanlineStarts.get(y-by1);
int end = y == by2-1 ? scanlineData.size() : scanlineStarts.get(y-by1+1);
x -= bx1;
// linear search for now
while (ptr < end) {
int x1 = scanlineData.get(ptr++);
if (x < x1) false;
int x2 = scanlineData.get(ptr++);
if (x < x2) true;
}
false;
}
public void set(int x, int y, Bool a) { unimplemented(); }
Rect boundingBoxOfTrueBits() { ret bx1 < 0 ? null : rect(bx1, by1, bx2, by2); }
}