| author | wenzelm | 
| Sat, 30 Nov 2024 22:33:21 +0100 | |
| changeset 81519 | cdc43c0fdbfc | 
| parent 80504 | 7ea69c26524b | 
| child 81557 | 8dc9453889ca | 
| permissions | -rw-r--r-- | 
| 28019 | 1 | (* Title: Pure/General/properties.ML | 
| 2 | Author: Makarius | |
| 3 | ||
| 4 | Property lists. | |
| 5 | *) | |
| 6 | ||
| 7 | signature PROPERTIES = | |
| 8 | sig | |
| 50842 | 9 | type entry = string * string | 
| 10 | type T = entry list | |
| 80504 | 11 | val print_eq: entry -> string | 
| 71465 
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
 wenzelm parents: 
51665diff
changeset | 12 | val entry_ord: entry ord | 
| 
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
 wenzelm parents: 
51665diff
changeset | 13 | val ord: T ord | 
| 28019 | 14 | val defined: T -> string -> bool | 
| 15 | val get: T -> string -> string option | |
| 50842 | 16 | val put: entry -> T -> T | 
| 28019 | 17 | val remove: string -> T -> T | 
| 77777 | 18 | val make_string: string -> string -> T | 
| 19 | val make_int: string -> int -> T | |
| 77772 | 20 | val get_string: T -> string -> string | 
| 21 | val get_int: T -> string -> int | |
| 22 | val get_seconds: T -> string -> Time.time | |
| 28019 | 23 | end; | 
| 24 | ||
| 25 | structure Properties: PROPERTIES = | |
| 26 | struct | |
| 27 | ||
| 50842 | 28 | type entry = string * string; | 
| 80504 | 29 | |
| 50842 | 30 | type T = entry list; | 
| 28019 | 31 | |
| 80504 | 32 | fun print_eq (a, b) = a ^ "=" ^ b; | 
| 33 | ||
| 71465 
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
 wenzelm parents: 
51665diff
changeset | 34 | val entry_ord = prod_ord string_ord string_ord; | 
| 
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
 wenzelm parents: 
51665diff
changeset | 35 | val ord = list_ord entry_ord; | 
| 
910a081cca74
more position information for oracles (e.g. "skip_proof" for 'sorry'), requires Proofterm.proofs := 1;
 wenzelm parents: 
51665diff
changeset | 36 | |
| 28019 | 37 | fun defined (props: T) name = AList.defined (op =) props name; | 
| 38 | fun get (props: T) name = AList.lookup (op =) props name; | |
| 43780 | 39 | fun put entry (props: T) = AList.update (op =) entry props; | 
| 28019 | 40 | fun remove name (props: T) = AList.delete (op =) name props; | 
| 41 | ||
| 77777 | 42 | fun make_string k s = if s = "" then [] else [(k, s)]; | 
| 43 | fun make_int k i = if i = 0 then [] else [(k, Value.print_int i)]; | |
| 44 | ||
| 77772 | 45 | val get_string = the_default "" oo get; | 
| 46 | ||
| 47 | fun get_int props name = | |
| 48 | (case get props name of | |
| 49 | NONE => 0 | |
| 50 | | SOME s => Value.parse_int s); | |
| 51 | ||
| 52 | fun get_seconds props name = | |
| 53 | (case get props name of | |
| 51665 | 54 | NONE => Time.zeroTime | 
| 55 | | SOME s => Time.fromReal (the_default 0.0 (Real.fromString s))); | |
| 56 | ||
| 28019 | 57 | end; |