equal
deleted
inserted
replaced
|
1 signature REF_TABLE = sig |
|
2 type t |
|
3 val read: serial -> t |
|
4 val write: serial -> t -> unit |
|
5 val delete: serial -> unit |
|
6 |
|
7 (* internal *) |
|
8 val peek: unit -> t Inttab.table |
|
9 end |
|
10 |
|
11 signature REF_TABLE_ARGS = sig |
|
12 type t |
|
13 val name: string |
|
14 end |
|
15 |
|
16 functor Ref_Table(Args : REF_TABLE_ARGS) : REF_TABLE where type t = Args.t = struct |
|
17 |
|
18 type t = Args.t |
|
19 |
|
20 type table = t Inttab.table |
|
21 val empty_table : table = Inttab.empty |
|
22 |
|
23 val table = Synchronized.var ("Ref_Table." ^ Args.name) empty_table |
|
24 |
|
25 fun read ser = the (Inttab.lookup (Synchronized.value table) ser) |
|
26 fun write ser t = Synchronized.change table (Inttab.update (ser, t)) |
|
27 val delete = Synchronized.change table o Inttab.delete |
|
28 |
|
29 fun peek () = Synchronized.value table |
|
30 |
|
31 end |