Warning: session_start(): open(/var/lib/php/sessions/sess_e0j2enn9t8gbq6rb191i7vi0co, 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
!7
cprint CompressorSpike {
switchable S snippetID = #1020763;
LinkedHashMap versions;
start-thread {
print("Snippet ID: " + snippetID);
dm_onFieldChange snippetID(r { setField(versions := null); dm_reload() });
if (versions == null) {
versions = mapToLinkedHashMap(textChangesOfSnippet(snippetID), sv -> pair(str(sv.versionID), sv.previousValue));
versions.put("latest", loadSnippet(snippetID));
versions = mapValuesToLinkedHashMap toLinesAndBack(versions); // canonicalize line breaks
change();
}
print("Have " + nVersions(versions) + " with a total of " + nLines(totalLineCount(values(versions))));
new Compressor().run();
}
abstract sclass Chunk {}
srecord CPair(int i1, int i2) > Chunk {}
srecord CPrim(S s) > Chunk {}
class Compressor {
Map textIDToLines = mapValuesToLinkedHashMap lines(versions);
LS allUniqueLines;
new L chunks;
Map lineIndex;
run {
allUniqueLines = uniquify(concatLists(values(textIDToLines)));
for (S line : allUniqueLines)
chunks.add(new CPrim(line));
lineIndex = listIndex(collect s(chunks));
for (S id, lines : textIDToLines) {
print(id + ": " + joinWithSpace(map(lines, line -> lineIndex.get(line))));
}
}
}
}