Warning: session_start(): open(/var/lib/php/sessions/sess_85o73hh2vvg9niv0e08uqbmkp5, 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
static L unrollOptions(Concept c) {
if (c << Options)
ret concatMap("unrollOptions", c/Options);
if (!conceptHasOptions(c))
ret ll(c);
else { // c has Options hidden somewhere within - recurse & "multiply"
new Map simples;
Map> multiples = new TreeMap;
for (S field : conceptFields(c)) {
O val = cget(c, field);
if (!val << Concept)
simples.put(field, val);
else {
L l = unrollOptions(val/Concept);
if (empty(l)) ret ll();
else if (l(l) == 1)
simples.put(field, first(l));
else
multiples.put(field, l);
}
}
final Concept d = unlisted(c.getClass());
csetMap(d, simples);
if (empty(multiples))
ret ll(d);
else {
if (l(multiples) > 2) warn("todo johnny");
new L out;
L fields = asList(keys(multiples));
S field0 = fields.get(0);
for (Concept value0 : multiples.get(field0)) {
Concept e = unlisted(c.getClass());
copyConceptFields(d, e);
cset(e, field0, value0);
if (l(multiples) == 1) out.add(e); else {
S field1 = fields.get(1);
for (Concept value1 : multiples.get(field1)) {
Concept f = unlisted(c.getClass());
copyConceptFields(e, f);
cset(f, field1, value1);
out.add(f);
}
}
}
ret out;
}
}
}