sclass CompressorSearch { // public CompressionRegime regime; byte[] inputData; new Best best; *(CompressionRegime *regime) {} *(CompressionRegime *regime, byte[] *inputData) {} // can submit concurrently! Submission submit(A compression) { ret _submit(compression); } // private (although Submission is returned) class Submission { void setDecompressor(A decompressor) { this.decompressor_cache = decompressor; } byte[] inputData() { ret inputData; } simplyCached byte[] compressed() { ret decompressor_cache == null ?: regime.decompressorToBytes(decompressor_cache); } simplyCached A decompressor() { ret compressed_cache == null ?: regime.decompressorFromBytes(compressed_cache); } int compressedSize() { ret l(compressed()); } simplyCached double score() { ret doubleRatio(inputDataSize(), compressedSize()); } bool decompressed; O decompressedValue; O decompressed() { if (!decompressed) { decompressedValue = regime.runDecompressor(decompressor); set decompressed; } ret decompressedValue; } simplyCached Bool correct() { ret byteArraysEqual(toByteArray(decompressed()), inputData()); } } int inputDataSize() { ret l(inputData); } Submission _submit(A compression) { if (compression == null) null; new Submission s; s.setDecompressor(compression); if (s.score() > best.score()) if (!s.correct()) warn("Compressor didn't verify"); else best.put(s, s.score()); ret s; } }