src/Pure/ML-Systems/unsynchronized.ML
author wenzelm
Wed, 30 Sep 2009 22:27:20 +0200
changeset 32789 d89327de0b3c
parent 32737 76fa673eee8b
child 38799 712cb964d113
permissions -rw-r--r--
removed redundant Sign.certify_prop, use Sign.cert_prop instead; tuned;

(*  Title:      Pure/ML-Systems/unsynchronized.ML
    Author:     Makarius

Raw ML references as unsynchronized state variables.
*)

structure Unsynchronized =
struct

datatype ref = datatype ref;

val op := = op :=;
val ! = !;

fun set flag = (flag := true; true);
fun reset flag = (flag := false; false);
fun toggle flag = (flag := not (! flag); ! flag);

fun change r f = r := f (! r);
fun change_result r f = let val (x, y) = f (! r) in r := y; x end;

fun inc i = (i := ! i + (1: int); ! i);
fun dec i = (i := ! i - (1: int); ! i);

end;