view 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 source

#{
	//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
				}
			}
		}
	}

}