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); }