Mercurial > repos > tabletprog
comparison modules/dict.tp @ 74:434988bb1fb4
Add lame linear search dictionary
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 14 Jul 2012 21:20:30 -0700 |
parents | |
children | 2dca1a880c00 |
comparison
equal
deleted
inserted
replaced
73:327db7cf37a2 | 74:434988bb1fb4 |
---|---|
1 #{ | |
2 //requires only that keys support equality | |
3 linear <- { | |
4 key:val <- :k v { | |
5 #{ | |
6 key <- k | |
7 val <- v | |
8 } | |
9 } | |
10 els <- #[] | |
11 find <- :tofind { | |
12 print: "dict find " | |
13 print: "dict find " . tofind . "\n" | |
14 idx <- 0 | |
15 while: { | |
16 if: idx < (els length) { | |
17 ((els get: idx) key: ) != tofind | |
18 } else: {false} | |
19 } do: { | |
20 idx <- idx + 1 | |
21 } | |
22 if: idx < (els length) {idx} else: {-1} | |
23 } | |
24 #{ | |
25 set <- :k v { | |
26 print: "linear dict set\n" | |
27 idx <- find: k | |
28 print: "find returned: " . idx . "\n" | |
29 if: idx < 0 { | |
30 els append: (key: k val: v) | |
31 } else: { | |
32 (els get: idx) val!: v | |
33 } | |
34 self | |
35 } | |
36 | |
37 get <- :k { | |
38 print: "linear dict get\n" | |
39 get: k withDefault: false | |
40 } | |
41 | |
42 get:withDefault <- :k default { | |
43 print: "linear dict get:withDefault\n" | |
44 idx <- find: k | |
45 if: idx < 0 { | |
46 default | |
47 } else: { | |
48 (els get: idx) val | |
49 } | |
50 } | |
51 } | |
52 } | |
53 | |
54 } |