sclass JE_CompressEachElementIndividually extends AbstractCompressor_AnyType> { settable IF0> elementCompressionStrategy; new L> searches; settable IF1 makeLiteral; // required // internal new LS renderedElements; new BitSet dirtyElements; int size() { ret l(inputData()); } S getRenderedElement(int i) { if (contains(dirtyElements, i) || empty(get(renderedElements, i))) { remove(dirtyElements, i); listSet(renderedElements, i, renderElement(i)); } ret renderedElements.get(i); } S renderElement(int i) { var search = _get(searches, i); S comp = search?!; ret comp != null ? comp : makeLiteral.get(data); } // get current best compressed representation S code aka get() { ret formatFunctionCall ll(countIterator getRenderedElement(size())); } // start compressors run { if (elementCompressionStrategy == null) ret; probabilisticForEach(scheduler(), 1.0, 0.5, indexAsSideValue(inputData()), data -> { int i = data.sideValue(); var subSearch = new CompressionSearch_AnyType(assertNotNull(+regime()), data!); subSearch.onNewBest(-> set(dirtyElements, i)); listSet(searches, i, subSearch); subSearch.addStrategy(elementCompressionStrategy!); ret subSearch; }); } }