primitive_map.aes
1 2 contract MapServer = 3 4 function insert : (string, string, map(string, string)) => map(string, string) 5 function delete : (string, map(string, string)) => map(string, string) 6 7 contract PrimitiveMaps = 8 9 record state = { remote : MapServer, 10 map : map(string, string), 11 map2 : map(string, string) } 12 13 function init(r) = 14 let m = {} 15 { remote = r, map = m, map2 = m } 16 17 function set_remote(r) = put(state{ remote = r }) 18 19 function insert(k, v, m) : map(string, string) = m{ [k] = v } 20 function delete(k, m) : map(string, string) = Map.delete(k, m) 21 22 function remote_insert(k, v, m) = 23 state.remote.insert(k, v, m) 24 25 function remote_delete(k, m) = 26 state.remote.delete(k, m) 27 28 function get_state_map() = state.map 29 function set_state_map(m) = put(state{ map = m }) 30 31 function clone_state() = put(state{ map2 = state.map }) 32 33 function insert_state(k, v) = put(state{ map @ m = m { [k] = v } }) 34 function delete_state(k) = put(state{ map @ m = Map.delete(k, m) }) 35 function lookup_state(k) = Map.lookup(k, state.map) 36 37 function double_insert_state(k, v1, v2) = 38 put(state{ map @ m = m { [k] = v1 }, 39 map2 @ m = m { [k] = v2 } }) 40 41 function test() = 42 let m = {} : map(string, string) 43 let m1 = m { ["foo"] = "value_of_foo", 44 ["bla"] = "value_of_bla" } 45 let m2 = Map.delete("foo", m1) 46 let m3 = m2 { ["bla"] = "new_value_of_bla" } 47 [Map.lookup("foo", m), Map.lookup("bla", m), 48 Map.lookup("foo", m1), Map.lookup("bla", m1), 49 Map.lookup("foo", m2), Map.lookup("bla", m2), 50 Map.lookup("foo", m3), Map.lookup("bla", m3)] 51 52 function return_map() = 53 Map.delete("goo", {["foo"] = "bar", ["goo"] = "gaa"}) 54 55 function argument_map(m : map(string, string)) = 56 m["foo"] 57