src/Pure/library.ML
changeset 23932 7afee4bf89e8
parent 23922 707639e9497d
child 23937 66e1f24d655d
equal deleted inserted replaced
23931:4d82207fb251 23932:7afee4bf89e8
    72   val forall: ('a -> bool) -> 'a list -> bool
    72   val forall: ('a -> bool) -> 'a list -> bool
    73   val set: bool ref -> bool
    73   val set: bool ref -> bool
    74   val reset: bool ref -> bool
    74   val reset: bool ref -> bool
    75   val toggle: bool ref -> bool
    75   val toggle: bool ref -> bool
    76   val change: 'a ref -> ('a -> 'a) -> unit
    76   val change: 'a ref -> ('a -> 'a) -> unit
       
    77   val setmp_noncritical: 'a ref -> 'a -> ('b -> 'c) -> 'b -> 'c
    77   val setmp: 'a ref -> 'a -> ('b -> 'c) -> 'b -> 'c
    78   val setmp: 'a ref -> 'a -> ('b -> 'c) -> 'b -> 'c
    78 
    79 
    79   (*lists*)
    80   (*lists*)
    80   exception UnequalLengths
    81   exception UnequalLengths
    81   val single: 'a -> 'a list
    82   val single: 'a -> 'a list
   364 fun toggle flag = (flag := not (! flag); ! flag);
   365 fun toggle flag = (flag := not (! flag); ! flag);
   365 
   366 
   366 fun change r f = r := f (! r);
   367 fun change r f = r := f (! r);
   367 
   368 
   368 (*temporarily set flag during execution*)
   369 (*temporarily set flag during execution*)
   369 fun setmp flag value f x =
   370 fun setmp_noncritical flag value f x =
   370   let
   371   let
   371     val orig_value = ! flag;
   372     val orig_value = ! flag;
   372     val _ = flag := value;
   373     val _ = flag := value;
   373     val result = capture f x;
   374     val result = capture f x;
   374     val _ = flag := orig_value;
   375     val _ = flag := orig_value;
   375   in release result end;
   376   in release result end;
       
   377 
       
   378 fun setmp flag value f x = CRITICAL (fn () => setmp_noncritical flag value f x);
   376 
   379 
   377 
   380 
   378 
   381 
   379 (** lists **)
   382 (** lists **)
   380 
   383