Warning: session_start(): open(/var/lib/php/sessions/sess_sievio38uln5b23j3jq2ivtlth, 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 VarBasedArithmeticEngine {
MapSO vars = syncTreeMap();
sclass NotRunYet {}
static new NotRunYet notRunYet;
abstract record MultiOp(LS inVars, S outVar) implements Runnable {
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;
}
}
macro ctors {
*(LS *inVars, S *outVar) {}
*(S... vars) { super(vars); }
}
// add doubles
persistent class DAdd > MultiOp { ctors
Double perform(L values) {
ret doubleSum(allToDouble(values));
}
}
// multiply doubles
persistent class DMul > MultiOp { ctors
Double perform(L values) {
ret doubleProduct(allToDouble(values));
}
}
// subtract doubles (a-b-c...)
persistent class DMinus > MultiOp { ctors
Double perform(L values) {
ret doubleMultiMinus(allToDouble(values));
}
}
// division (a/b/c...) with division by zero giving 0
persistent class DDiv > MultiOp { ctors
Double perform(L values) {
ret doubleMultiRatio(allToDouble(values));
}
}
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); }
*(O... _) {
addParamsToMap_inPlace(vars, _);
}
}