sclass GlobalID { // We need 76 bits for 26^16 IDs long a; int b; *() {} *(S id) { assertGlobalID(id); BigInt value = bigint(0); for (int i = 0; i < l(id); i++) value = plus(mul(value, 26), charDiff(id.charAt(i), 'a')); ifdef GlobalID_debug print("value in constructor: " + value); endifdef a = value.longValue(); value = value.shiftRight(64); b = value.intValue(); } toString { BigInt value = bigint(b); value = value.shiftLeft(32); value = plus(value, (a >> 32) & 0xFFFFFFFF); value = value.shiftLeft(32); value = plus(value, a & 0xFFFFFFFF); ifdef GlobalID_debug print("value in toString: " + value); endifdef 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); } }