changeset 74:434988bb1fb4

Add lame linear search dictionary
author Mike Pavone <pavone@retrodev.com>
date Sat, 14 Jul 2012 21:20:30 -0700
parents 327db7cf37a2
children 2dca1a880c00
files modules/dict.tp
diffstat 1 files changed, 54 insertions(+), 0 deletions(-) [+]
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
+				}
+			}
+		}
+	}
+
+}