# HG changeset patch # User Mike Pavone # Date 1342326030 25200 # Node ID 434988bb1fb4c7fea51b43c426fbdb47d642822e # Parent 327db7cf37a246cbe56331b22da49de2690c04b2 Add lame linear search dictionary diff -r 327db7cf37a2 -r 434988bb1fb4 modules/dict.tp --- /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 + } + } + } + } + +}