Warning: session_start(): open(/var/lib/php/sessions/sess_cmvdg08a9dt0h011203nn1646o, 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
sclass FreeList {
MultiSetMap byLength = multiSetMap_innerCustomCompactTreeSet_outerTreeMap(intRangeComparatorByStart());
TreeSet inOrder = new(intRangeComparatorByStart());
void add(IntRange r) {
if (empty(r)) ret;
// only special case here is merging with previous and/or following entry
IntRange before = inOrder.floor(r), after = inOrder.ceiling(r);
if (before != null && before.end == r.start) {
r = IntRange(before.start, r.end);
remove(before);
}
if (after != null && after.start == r.end) {
r = IntRange(r.start, after.end);
remove(after);
}
inOrder.add(r);
byLength.add(r.length(), r);
}
void remove(IntRange r) {
if (empty(r)) ret;
IntRange r2 = inOrder.floor(r);
if (r2 == null) fail("User error");
if (eq(r, r2)) {
inOrder.remove(r2);
byLength.remove(r2.length(), r2);
ret;
}
remove(r2);
IntRange left = new(r2.start, r.start);
IntRange right = new(r.end, r2.end);
add(left);
add(right);
}
IntRange findFreeSpace(int minSize) {
Map.Entry> e = ((NavigableMap) byLength.data).ceilingEntry(minSize);
ret e == null ? null : first(e.getValue());
}
}