Mercurial > urweb
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 |