libisabelle-protocol/libisabelle/protocol/ref_table.ML
changeset 59469 5c56f14bea53
parent 59340 097347b8910e
equal deleted inserted replaced
59468:288e0d80578d 59469:5c56f14bea53
       
     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