| author | blanchet | 
| Wed, 08 Feb 2012 00:05:22 +0100 | |
| changeset 46438 | 93344b60cb30 | 
| parent 45673 | cd41e3903fbf | 
| child 46687 | 7e47ae85e161 | 
| permissions | -rw-r--r-- | 
| 38840 | 1 | /* Title: Pure/Concurrent/volatile.scala | 
| 45673 
cd41e3903fbf
separate compilation of PIDE vs. Pure sources, which enables independent Scala library;
 wenzelm parents: 
45667diff
changeset | 2 | Module: PIDE | 
| 38840 | 3 | Author: Makarius | 
| 4 | ||
| 5 | Volatile variables. | |
| 6 | */ | |
| 7 | ||
| 8 | package isabelle | |
| 9 | ||
| 10 | ||
| 45248 | 11 | object Volatile | 
| 12 | {
 | |
| 13 | def apply[A](init: A): Volatile[A] = new Volatile(init) | |
| 14 | } | |
| 15 | ||
| 16 | ||
| 17 | class Volatile[A] private(init: A) | |
| 38840 | 18 | {
 | 
| 19 | @volatile private var state: A = init | |
| 43719 | 20 | def apply(): A = state | 
| 38840 | 21 |   def change(f: A => A) { state = f(state) }
 | 
| 22 | def change_yield[B](f: A => (B, A)): B = | |
| 23 |   {
 | |
| 24 | val (result, new_state) = f(state) | |
| 25 | state = new_state | |
| 26 | result | |
| 27 | } | |
| 28 | } | |
| 29 |