comparison modules/dict.tp @ 164:75be44ed9df5

Dict improvements
author Mike Pavone <pavone@retrodev.com>
date Sat, 10 Aug 2013 22:26:26 -0700
parents 6735db9b44ba
children a868a2aec930
comparison
equal deleted inserted replaced
163:f594e6836c44 164:75be44ed9df5
8 } 8 }
9 } 9 }
10 els <- #[] 10 els <- #[]
11 find <- :tofind { 11 find <- :tofind {
12 idx <- 0 12 idx <- 0
13 while: { 13 while: {
14 if: idx < (els length) { 14 if: idx < (els length) {
15 ((els get: idx) key: ) != tofind 15 ((els get: idx) key: ) != tofind
16 } else: {false} 16 } else: {false}
17 } do: { 17 } do: {
18 idx <- idx + 1 18 idx <- idx + 1
19 } 19 }
20 if: idx < (els length) {idx} else: {-1} 20 if: idx < (els length) {idx} else: {-1}
21 } 21 }
27 } else: { 27 } else: {
28 (els get: idx) val!: v 28 (els get: idx) val!: v
29 } 29 }
30 self 30 self
31 } 31 }
32 32
33 get <- :k { 33 get <- :k {
34 get: k withDefault: false 34 get: k withDefault: false
35 } 35 }
36 36
37 get:withDefault <- :k default { 37 get:withDefault <- :k default {
38 idx <- find: k 38 idx <- find: k
39 if: idx < 0 { 39 if: idx < 0 {
40 default 40 default
41 } else: { 41 } else: {
42 (els get: idx) val 42 (els get: idx) val
43 } 43 }
44 } 44 }
45 45
46 get:elseSet <- :k :else {
47 idx <- find: k
48 if: idx < 0 {
49 v <- else:
50 els append: (key: k val: v)
51 v
52 } else: {
53 (els get: idx) val
54 }
55 }
56
46 foreach <- :l { 57 foreach <- :l {
47 foreach: els :idx el { 58 foreach: els :idx el {
48 l: (el key) (el val) 59 l: (el key) (el val)
49 } 60 }
50 } 61 }
51 62
63 length <- { els length }
52 } 64 }
53 } 65 }
54 66
55 } 67 }