package jazz.unsafe;
///////////////////////////////////////////////////////////////////////////////
//
// Imperative counter (use with care)
//
///////////////////////////////////////////////////////////////////////////////
public final class Counter {
// Create a new counter
public static create(n: int): Counter;
// Next value
public next(): int;
// Private native hashtable
table: native;
}
///////////////////////////////////////////////////////////////////////////////
//
// Implementation
//
///////////////////////////////////////////////////////////////////////////////
// Temporary (should be synchronized)
Counter.create(n) = (table; put; new Counter(table = table)) {
table = native("java.util.Hashtable()");
put = native("java.lang.Object "
"java.util.Hashtable.put(java.lang.Object,java.lang.Object)",
table, 0, n);
}
// Temporary (should be synchronized)
next@Counter() = (update; n)
{
n = native("java.lang.Object "
"java.util.Hashtable.get(java.lang.Object)",
table, 0);
update = native("java.lang.Object "
"java.util.Hashtable.put(java.lang.Object,java.lang.Object)",
table, 0, n + 1);
}