static A optParam(ThreadLocal tl, A defaultValue) {
ret optPar(tl, defaultValue);
}
static A optParam(ThreadLocal tl) {
ret optPar(tl);
}
static O mapMethodLike optParam(S name, Map params) {
ret mapGet(params, name);
}
// now also takes a map as single array entry
static A optParam(O[] opt, S name, A defaultValue) {
int n = l(opt);
if (n == 1 && opt[0] instanceof Map) {
Map map = cast opt[0];
ret map.containsKey(name) ? (A) map.get(name) : defaultValue;
}
if (!even(l(opt))) fail("Odd parameter length");
for (int i = 0; i < l(opt); i += 2)
if (eq(opt[i], name))
ret (A) opt[i+1];
ret defaultValue;
}
sO optParam(O[] opt, S name) {
ret optParam(opt, name, null);
}
sO mapMethodLike optParam(S name, O[] params) {
ret optParam(params, name);
}