src/Pure/General/history.ML
changeset 7715 f90ec7937a7d
parent 6680 7f97bb4f790d
child 8806 a202293db3f6
equal deleted inserted replaced
7714:e6aa4fca983e 7715:f90ec7937a7d
     9 sig
     9 sig
    10   type 'a T
    10   type 'a T
    11   val init: int option -> 'a -> 'a T
    11   val init: int option -> 'a -> 'a T
    12   val is_initial: 'a T -> bool
    12   val is_initial: 'a T -> bool
    13   val current: 'a T -> 'a
    13   val current: 'a T -> 'a
    14   val clear: 'a T -> 'a T
    14   val clear: int -> 'a T -> 'a T
    15   val undo: 'a T -> 'a T
    15   val undo: 'a T -> 'a T
    16   val redo: 'a T -> 'a T
    16   val redo: 'a T -> 'a T
    17   val apply_copy: ('a -> 'a) -> ('a -> 'a) -> 'a T -> 'a T
    17   val apply_copy: ('a -> 'a) -> ('a -> 'a) -> 'a T -> 'a T
    18   val apply: ('a -> 'a) -> 'a T -> 'a T
    18   val apply: ('a -> 'a) -> 'a T -> 'a T
    19   val map: ('a -> 'a) -> 'a T -> 'a T
    19   val map: ('a -> 'a) -> 'a T -> 'a T
    32 
    32 
    33 fun is_initial (History (_, (_, len, _, _))) = len = 0;
    33 fun is_initial (History (_, (_, len, _, _))) = len = 0;
    34 
    34 
    35 fun current (History (x, _)) = x;
    35 fun current (History (x, _)) = x;
    36 
    36 
    37 fun clear (History (x, (lim, _, _, _))) = History (x, (lim, 0, [], []));
    37 fun clear n (History (x, (lim, len, undo_list, redo_list))) =
       
    38   History (x, (lim, Int.max (0, len - n), drop (n, undo_list), redo_list));
    38 
    39 
    39 fun undo (History (_, (_, _, [], _))) = error "No further undo information"
    40 fun undo (History (_, (_, _, [], _))) = error "No further undo information"
    40   | undo (History (x, (lim, len, u :: undo_list, redo_list))) =
    41   | undo (History (x, (lim, len, u :: undo_list, redo_list))) =
    41       History (u, (lim, len - 1, undo_list, x :: redo_list));
    42       History (u, (lim, len - 1, undo_list, x :: redo_list));
    42 
    43