Warning: session_start(): open(/var/lib/php/sessions/sess_jpetki115kdardsf0bju0rqvor, 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 OpsOnVars {
MapSO vars = syncTreeMap();
sclass NotRunYet {}
static new NotRunYet notRunYet;
*(O... _) {
addParamsToMap_inPlace(vars, _);
}
O getVar aka get(S var) { ret vars.get(var); }
void setVar aka set(S var, O value) { if (var != null) vars.put(var, value); }
record SetVar(S var, O value) is Runnable {
run { setVar(var, value); }
}
// SINGLE-OPS (one input variable, one output variable)
macro singleOpCtors {
*() {}
*(S *inVar, S *outVar) {}
}
abstract noeq record SingleOp(S inVar, S outVar) is Runnable {
transient O value = notRunYet;
abstract O perform(O arg);
run { get(); }
O get() {
value = perform(getVar(inVar));
setVar(outVar, value);
ret value;
}
}
// MULTI-OPS (multiple input variables, one output variable)
abstract noeq record MultiOp(LS inVars, S outVar) is Runnable {
transient O value = notRunYet;
abstract O perform(L values);
*(S... vars) {
outVar = last(vars);
inVars = asListMinusLast(vars);
}
run { get(); }
O get() {
value = perform(map getVar(inVars);
setVar(outVar, value);
ret value;
}
}
record Sequence(L<
macro multiOpCtors {
*() {}
*(LS *inVars, S *outVar) {}
*(S... vars) { super(vars); }
}
}