Warning: session_start(): open(/var/lib/php/sessions/sess_bhc46i664ergrdaif9ckfk3v4q, 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 AdaptiveIdentifierCompression {
new SS shortenings;
new MultiSet tokenCount;
new SS expansions;
S escapeWord = "xx";
S codeAlphabet = lowerCaseAlphabet();
ItIt newCodeMaker;
int conflicts;
settable int minCountToCompress = 2;
void init {
newCodeMaker if null = allWordsOfAlphabet(codeAlphabet);
}
S encode(S token) {
if (!isIdentifier(token)) ret token;
init();
tokenCount.add(token);
S code = shortenings.get(token);
if (code != null)
ret code;
int count = tokenCount.get(token);
if (count < minCountToCompress)
ret token;
S conflict = expansion.get(code);
if (conflict != null) {
warn("conflict: " + token);
++conflicts;
// TODO
}
code = newCode();
if (code != null) {
shortenings.put(token, code);
expansions.put(code, token);
}
ret token;
}
S newCode() {
S code;
do {
if (!newCodeMaker.hasNext())
null;
code = newCodeMaker.next();
} while (shortenings.containsKey(code));
ret code;
}
}