Warning: session_start(): open(/var/lib/php/sessions/sess_omsa0urmbvif5og60u1d4min1l, 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
srecord noeq G22_RegionToSSIs(IImageRegion region) {
RGB color;
L ssis;
new L growingSSIs;
class GrowingSSI {
settable int y1;
new IntBuffer data;
int y2() { ret y1+l(data)/2; }
SSI finish() {
ret new SSI(y1, y2()).data(data.toIntArray())
.color(color);
}
}
L get() {
if (region == null) null;
color = region.color();
ssis = new L;
Rect r = region.bounds();
int x1 = r.x1(), y1 = r.y1(), y2 = r.y2(), h = y2-y1, w = r.w;
for (int y = y1; y < y2; y++) {
reMutable y;
L streaks = genericStreaks(w, x -> region.contains(x1+x, y));
// finish SSIs
while (longerThan(growingSSIs, streaks))
ssis.add(popLast(growingSSIs).finish());
// now we know that l(growingSSIs) <= l(streaks)
// start new SSIs
for (int i = l(growingSSIs); i < l(streaks); i++)
growingSSIs.add(new GrowingSSI().y1(y));
// continue SSIs
for (ssi, range : unpair zipTwoLists(growingSSIs, streaks)) {
ssi.data.add(x1+range.start);
ssi.data.add(x1+range.end);
}
}
for (ssi : cloneAndClear(growingSSIs))
ssis.add(ssi.finish());
ret ssis;
}
swappable IntRange selectHorizontalPart(L parts) {
ret first(parts);
}
}