Mercurial > repos > tabletprog
comparison modules/sets.tp @ 125:6f8d868e8da0
Add size to set implementation
author | Mike Pavone <pavone@retrodev.com> |
---|---|
date | Mon, 05 Aug 2013 23:36:18 -0700 |
parents | cbc92ee13f35 |
children | a2d2d8e09291 |
comparison
equal
deleted
inserted
replaced
80:cbc92ee13f35 | 125:6f8d868e8da0 |
---|---|
3 empty <- #{ | 3 empty <- #{ |
4 empty? <- { true } | 4 empty? <- { true } |
5 } | 5 } |
6 #{ | 6 #{ |
7 buckets <- #[empty empty empty empty] | 7 buckets <- #[empty empty empty empty] |
8 size <- 0 | |
8 contains? <- :object { | 9 contains? <- :object { |
9 hv <- object hash | 10 hv <- object hash |
10 | 11 |
11 notdone <- true | 12 notdone <- true |
12 hashes <- #[hv (hv + 1) (hv - 1)] | 13 hashes <- #[hv (hv + 1) (hv - 1)] |
47 hv <- hashes get: i | 48 hv <- hashes get: i |
48 trunc <- hv % (buckets length) | 49 trunc <- hv % (buckets length) |
49 if: trunc < 0 { trunc <- 0 - trunc } | 50 if: trunc < 0 { trunc <- 0 - trunc } |
50 bucketval <- (buckets get: trunc) | 51 bucketval <- (buckets get: trunc) |
51 if: (bucketval empty?) { | 52 if: (bucketval empty?) { |
53 size <- size + 1 | |
52 buckets set: trunc (makeBucket: hv) | 54 buckets set: trunc (makeBucket: hv) |
53 notdone <- false | 55 notdone <- false |
54 } else: { | 56 } else: { |
55 if: (bucketval eq: hv) { | 57 if: (bucketval eq: hv) { |
56 notdone <- false | 58 notdone <- false |
59 i <- i + 1 | 61 i <- i + 1 |
60 } | 62 } |
61 if: notdone { | 63 if: notdone { |
62 newsize <- (buckets length) * 3 | 64 newsize <- (buckets length) * 3 |
63 newbucks <- #[] | 65 newbucks <- #[] |
66 newbucks resize: newsize | |
64 while: { (newbucks length) < newsize } do: { | 67 while: { (newbucks length) < newsize } do: { |
65 newbucks append: empty | 68 newbucks append: empty |
66 } | 69 } |
67 oldbucks <- buckets | 70 oldbucks <- buckets |
68 buckets <- newbucks | 71 buckets <- newbucks |
72 size <- 0 | |
69 foreach: oldbucks :idx el { | 73 foreach: oldbucks :idx el { |
70 if: (not: (el empty?)) { | 74 if: (not: (el empty?)) { |
71 addHash: (el v) | 75 addHash: (el v) |
72 } | 76 } |
73 } | 77 } |