Removed the notion of a "large" context. For simplicity, all contexts
[panda.git] / st / WriteStream.st
blobbd61ed50ce072f35d3e1c415800bf9014e938149
4 "Accessing"
6 WriteStream method!
7 next
8         self shouldNotImplement!
10 WriteStream method!
11 nextPut: anObject       
12         position >= writeLimit
13                 ifTrue: [self pastEndPut: anObject]
14                 ifFalse: [ position := position + 1.
15                                    collection at: position put: anObject]!
17 WriteStream method!
18 pastEndPut: anObject
19         "Grow the collection by creating a new bigger collection and then
20         copy over the contents from the old one. We grow by doubling the size
21         but the growth is kept between 20 and 1000000.
22         Finally we put <anObject> at the current write position."
24         | oldSize grownCollection |
25         oldSize := collection size.
26         grownCollection := collection class new: oldSize + ((oldSize max: 20) min: 1000000).
27         collection := grownCollection replaceFrom: 1 to: oldSize with: collection startingAt: 1.
28         writeLimit := collection size.
29         collection at: (position := position + 1) put: anObject.
31         ^ anObject!
33 WriteStream method!
34 growTo: anInteger
36    " anInteger is the required minimal new size of the collection "
37         | oldSize grownCollection newSize |
38         oldSize := collection size.
39      newSize := anInteger + (oldSize // 4 max: 20).
40         grownCollection := collection class new: newSize.
41         collection := grownCollection replaceFrom: 1 to: oldSize with: collection startingAt: 1.
42         writeLimit := collection size!
45 WriteStream method!
46 nextPutAll: aCollection
47         | newEnd |
49         newEnd := position + aCollection size.
50         newEnd > writeLimit
51                 ifTrue: [self growTo: newEnd + 10].
53         collection replaceFrom: position + 1 to: newEnd  with: aCollection startingAt: 1.
54         position := newEnd!
57 WriteStream method!
59         self nextPut: Character cr!
61 WriteStream method!
62 tab
63         self nextPut: Character tab!
66 WriteStream method!
67 contents
68         readLimit := readLimit max: position.
69         ^ collection copyFrom: 1 to: position!
72 "private"
74 WriteStream method!
75 on: aCollection
76         super on: aCollection.
77         readLimit := 0.
78         writeLimit := aCollection size!