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) & 0xFFFFFFFFL); value = value.shiftLeft(32); value = plus(value, a & 0xFFFFFFFFL); ifdef GlobalID_debug print("value in toString: " + value); endifdef char[] buf = new char[16]; for (int i = 16-1; i >= 0; i--) { buf[i] = charPlus('a', mod(value, 26).intValue()); value = div(value, 26); } ret str(buf); } }