!7 sclass Transformed { S input, transformed; new LS madeBy; } compact module TransformedInput extends DynObjectTable { start { dm_onTopInput_q(voidfunc(S s) { setData(objectsWhere(getData(), input := s)); }); } // API void addEntry(S input, S transformed, S madeBy) { if (neq(forInput, dm_topInput())) ret; lock lock; Transformed l = objectWhere(getData(), +input, +transformed); bool nu = l == null; if (nu) l = nu(Transformed, +input, +transformed); setAdd(l.madeBy, madeBy); if (nu) add(l); else setData_force(data); } }