Mercurial > repos > tabletprog
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/modules/dict.tp Sat Jul 14 21:20:30 2012 -0700 @@ -0,0 +1,54 @@ +#{ + //requires only that keys support equality + linear <- { + key:val <- :k v { + #{ + key <- k + val <- v + } + } + els <- #[] + find <- :tofind { + print: "dict find " + print: "dict find " . tofind . "\n" + idx <- 0 + while: { + if: idx < (els length) { + ((els get: idx) key: ) != tofind + } else: {false} + } do: { + idx <- idx + 1 + } + if: idx < (els length) {idx} else: {-1} + } + #{ + set <- :k v { + print: "linear dict set\n" + idx <- find: k + print: "find returned: " . idx . "\n" + if: idx < 0 { + els append: (key: k val: v) + } else: { + (els get: idx) val!: v + } + self + } + + get <- :k { + print: "linear dict get\n" + get: k withDefault: false + } + + get:withDefault <- :k default { + print: "linear dict get:withDefault\n" + idx <- find: k + if: idx < 0 { + default + } else: { + (els get: idx) val + } + } + } + } + +}