Warning: session_start(): open(/var/lib/php/sessions/sess_vqt2f9cqhu5d0e169g29bglq9g, 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 JE_CompressEachElementIndividually extends AbstractCompressor_AnyType> {
settable IF0, El>> elementCompressionStrategy;
new L, El>> searches;
settable IF1 makeLiteral; // required
// TODO: akas for variables
selfType onCompressionFail(IF1 f) { makeLiteral = f; this; }
settable bool debug;
// internal
new L renderedElements;
IJavaExpr renderedCode;
new BitSet dirtyElements;
int size() { ret l(inputData()); }
int nNotLiteral() { ret countPred(searches, search -> search.has()); }
scaffolded IJavaExpr getRenderedElement(int i) {
if (contains(dirtyElements, i) || empty(_get(renderedElements, i))) {
remove(dirtyElements, i);
//print("Rendering element " + (i+1) + "/" + size());
var e = renderElement(i);
listSet(renderedElements, i, e);
//print(" => " + e);
}
ret renderedElements.get(i);
}
IJavaExpr renderElement(int i) {
var search = _get(searches, i);
IJavaExpr comp = search?!;
if (comp == null) null;
IJavaExpr java = makeLiteral.get(_get(inputData(), i));
metaSet(java, gaveUp := this);
ret java;
}
bool dirty() { ret nempty(dirtyElements) || l(renderedElements) < size(); }
public void flush {
if (!dirty()) ret;
submit(code());
}
// get current best compressed representation
IJavaExpr code() {
if (dirty() || renderedCode == null) {
L els = countIteratorToList getRenderedElement(size());
renderedCode = javaExpr(
functionCall_list ll(els),
-> mapQuickEval_javaExpr(els));
}
ret renderedCode;
}
// start compressors
run {
if (elementCompressionStrategy == null) ret;
probabilisticForEach(scheduler(), 1.0, 0.5, indexAsSideValue(inputData()), new IF1, Runnable>() {
public void get(WithSideValue data) {
int i = data.sideValue();
var subSearch = new CompressionSearch_AnyType, El>(assertNotNull(+childRegime()), data!, 1 /* TODO */);
subSearch.onNewBest(-> set(dirtyElements, i));
listSet(searches, i, subSearch);
subSearch.addStrategy(elementCompressionStrategy!);
}
toString { ret "Compress element"; }
});
}
S stats() {
ret renderVars(+nNotLiteral() + " of " + size());
}
// might as well work (reuse compression regime for children)
swappable CompressionRegime_AnyType> childRegime() {
ret (CompressionRegime_AnyType) regime();
}
}