sclass GlobalID { // We need 76 bits for 26^16 IDs long a; int b; *() {} *(S id) { assertGlobalID(id); BigInt value = 0; for (int i = 0; i < l(id); i++) value = plus(mul(value, 26), charDiff(id.charAt(i), 'a')); a = value.longValue(); value = value.shiftRight(64); b = value.intValue(); } toString { BigInt value = b; value = value.shiftLeft(32); value = plus(value, (a >> 32) & 0xFFFFFFFF); value = value.shiftLeft(32); value = plus(value, a & 0xFFFFFFFF); StringBuilder buf = new StringBuilder(16); for (int i = 0; i < 16; i++) { buf.append(charPlus('a', mod(value, 26)).intValue()); value = div(value, 26); } ret str(buf); } }