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 |