Add st-handle.h
[panda.git] / st / Bag.st
blobcafdc4f5642a5a603cbac2e93b75ec445d85b204
4 Bag classMethod!
5 new
6         ^ self new: self defaultCapacity!
8 Bag classMethod!
9 new: requestedCapacity
10         ^ self basicNew initialize: requestedCapacity!
12 Bag classMethod!
13 defaultCapacity
14         ^ 4!
16 Bag classMethod!
17 minimumCapacity
18         ^ 4!
20 Bag method!
21 add: anObject withOccurances: anInteger
22         (contents at: anObject)
23                 isNil ifTrue: [contents at: anObject put: anInteger]
24                           ifFalse: [contents at: anObject put: ((contents at: anObject) + anInteger)]!
26 Bag method!
27 add: anObject
28         self add: anObject withOccurances: 1!
30 Bag method!
31 remove: anObject ifAbsent: aBlock
32         | count |
33         count := (contents at: anObject).
34         count ifNil: [^ aBlock value].
35         (count := count - 1) = 0
36                 ifTrue: [contents removeKey: anObject]
37                 ifFalse: [contents at: anObject put: count].
38         ^ anObject!
40 Bag method!
41 occurancesOf: anObject
42         | count |
43         count := (contents at: anObject).
44         count ifNil: [^ 0].
45         ^ count!
48 Bag method!
49 do: aBlock
50         contents keysDo: [ :object | (contents at: object) timesRepeat: [aBlock value: object]]!
52 Bag method!
53 size
54         | count |
55         count := 0.
56         self do: [ :object | count := count + 1].
57         ^ count!
58         
60 Bag method!
61 initialize: requestedCapacity
62         contents := Dictionary new: (self class minimumCapacity max: requestedCapacity)!