comparison src/multimap_fn.sml @ 2213:365727ff68f4

Complete overhaul: cache queries based on immediate query result, not eventual HTML output.
author Ziv Scully <ziv@mit.edu>
date Tue, 14 Oct 2014 18:05:09 -0400
parents 39faa4a037f4
children
comparison
equal deleted inserted replaced
2212:388ba4dc7c96 2213:365727ff68f4
1 functor MultimapFn (structure KeyMap : ORD_MAP structure ValSet : ORD_SET) = struct 1 functor MultimapFn (structure KeyMap : ORD_MAP structure ValSet : ORD_SET) = struct
2 type key = KeyMap.Key.ord_key 2 type key = KeyMap.Key.ord_key
3 type item = ValSet.item 3 type item = ValSet.item
4 type items = ValSet.set 4 type itemSet = ValSet.set
5 type multimap = ValSet.set KeyMap.map 5 type multimap = ValSet.set KeyMap.map
6 fun inserts (kToVs : multimap, k : key, vs : items) : multimap = 6 val empty : multimap = KeyMap.empty
7 fun insertSet (kToVs : multimap, k : key, vs : itemSet) : multimap =
7 KeyMap.unionWith ValSet.union (kToVs, KeyMap.singleton (k, vs)) 8 KeyMap.unionWith ValSet.union (kToVs, KeyMap.singleton (k, vs))
8 fun insert (kToVs : multimap, k : key, v : item) : multimap = 9 fun insert (kToVs : multimap, k : key, v : item) : multimap =
9 inserts (kToVs, k, ValSet.singleton v) 10 insertSet (kToVs, k, ValSet.singleton v)
10 fun find (kToVs : multimap, k : key) = 11 fun findSet (kToVs : multimap, k : key) =
11 case KeyMap.find (kToVs, k) of 12 case KeyMap.find (kToVs, k) of
12 SOME vs => vs 13 SOME vs => vs
13 | NONE => ValSet.empty 14 | NONE => ValSet.empty
15 val findList : multimap * key -> item list = ValSet.listItems o findSet
14 end 16 end