Add st-handle.h
[panda.git] / st / Collection.st
blob4ca6a76f9fa82d61aa834e055d2fc5e4ffae7b99
2 "instance creation"
4 Collection classMethod!
5 with: anObject
6         ^ (self new)
7         add: anObject;
8         yourself!
10 Collection classMethod!
11 with: firstObject with: secondObject
12         ^ (self new)
13         add: firstObject;
14         add: secondObject;
15         yourself!
17 Collection classMethod!
18 with: firstObject with: secondObject with: thirdObject
19         ^ (self new) add: firstObject;
20         add: secondObject;
21         add: thirdObject;
22         yourself!
24 Collection classMethod!
25 with: firstObject with: secondObject with: thirdObject with: fourthObject
26         ^ (self new)
27         add: firstObject;
28         add: secondObject;
29         add: thirdObject;
30         add: fourthObject;
31         yourself!
33 "adding"
35 Collection method!
36 add: anObject
37         self subclassResponsibility!
39 Collection method!
40 addAll: aCollection
41         aCollection do: [ :each | self add: each ].
42         ^ aCollection! 
45 "removing"
47 Collection method!
48 remove: anObject ifAbsent: anExceptionBlock
49         self subclassResponsibility!
51 Collection method!
52 remove: anObject
53         ^ self remove: anObject ifAbsent: [self errorNotFound]!
55 Collection method!
56 removeAll: aCollection
57         aCollection do: [ :each | self remove: each ].
58         ^ aCollection! 
61 "testing"
63 Collection method!
64 isEmpty
65         ^ self size = 0!
67 Collection method!
68 includes: anObject
69         self do: [ :each | anObject = each ifTrue: [^ true]].
70         ^ false!
72 Collection method!
73 occurancesOf: anObject
74         | tally |
75         tally := 0.
76         self do: [ :each | anObject = each ifTrue: [ tally := tally + 1]].
77         ^ tally!
80 "accessing"
82 Collection method!
83 size
84         | tally |
85         tally := 0.
86         self do: [ :each | tally := tally + 1].
87         ^ tally!
89 Collection method!
90 anyOne
91         self do: [ :el | ^ el]!
93 "enumerating"
95 Collection method!
96 do: aBlock
97         self subclassResponsibility!
99 Collection method!
100 collect: aBlock
101         | newCollection |
102         newCollection := self species new.
103         self do: [ :each | newCollection add: (aBlock value: each)].
104         ^ newCollection!
106 Collection method!
107 reject: aBlock
108         ^ self select: [ :element | (aBlock value: element) == false]!
110 Collection method!
111 select: aBlock
112         | newCollection |
113         newCollection := self species new.
114         self do: [ :each | (aBlock value: each) ifTrue: [newCollection add: each ]].
115         ^ newCollection!
117 "printing"
118 Collection method!
119 printOn: aStream
120     | size i |
121         aStream nextPutAll: self class name.
122     aStream nextPutAll: ' ('.
124         i := 0.
125         size := self size.
126     self do:
127                 [ :el |
128          el == self
129             ifTrue: ['...' printOn: aStream]
130             ifFalse: [el printOn: aStream].
131                  (i := i + 1) < size
132                          ifTrue: [aStream nextPutAll: ' ']].
133     aStream nextPut: $)!
135 "private"
137 Collection method!
138 errorNotFound
139         self error: 'Object is not in collection'!
141 Collection method!
142 species
143         ^ self class!