[squeak-dev] The Trunk: Collections-nice.340.mcz
commits at source.squeak.org
commits at source.squeak.org
Tue Mar 16 22:17:18 UTC 2010
Nicolas Cellier uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-nice.340.mcz
==================== Summary ====================
Name: Collections-nice.340
Author: nice
Time: 16 March 2010, 11:16:54.234 pm
UUID: 1d3154f5-018f-4624-a9e5-12b7349558b7
Ancestors: Collections-ul.339
Generalize stream protocol #readInto:startingAt:count:
It's the same as #next:into:startingAt: but avoid a copy and rather answer number of elements read.
=============== Diff against Collections-ul.339 ===============
Item was added:
+ ----- Method: ReadStream>>readInto:startingAt:count: (in category 'accessing') -----
+ readInto: aCollection startingAt: startIndex count: n
+ "Read n objects into the given collection.
+ Return number of elements that have been read."
+ | max |
+ max := (readLimit - position) min: n.
+ aCollection
+ replaceFrom: startIndex
+ to: startIndex+max-1
+ with: collection
+ startingAt: position+1.
+ position := position + max.
+ ^max!
Item was added:
+ ----- Method: NullStream>>readInto:startingAt:count: (in category 'reading') -----
+ readInto: aCollection startingAt: startIndex count: n
+ "Read n objects into the given collection.
+ Return number of elements that have been read."
+
+ position := position + n.
+ ^n!
Item was added:
+ ----- Method: PositionableStream>>readInto:startingAt:count: (in category 'accessing') -----
+ readInto: aCollection startingAt: startIndex count: n
+ "Read n objects into the given collection.
+ Return number of elements that have been read."
+ | obj |
+ 0 to: n - 1 do: [:i |
+ (obj := self next) == nil ifTrue: [^i].
+ aCollection at: startIndex + i put: obj].
+ ^n!
Item was added:
+ ----- Method: RWBinaryOrTextStream>>readInto:startingAt:count: (in category 'as yet unclassified') -----
+ readInto: aCollection startingAt: startIndex count: n
+ "Read n objects into the given collection.
+ Return number of elements that have been read."
+ "Overriden for efficiency"
+ | max |
+ max := (readLimit - position) min: n.
+ aCollection
+ replaceFrom: startIndex
+ to: startIndex+max-1
+ with: collection
+ startingAt: position+1.
+ position := position + max.
+ ^max!
Item was changed:
----- Method: PositionableStream>>next:into:startingAt: (in category 'accessing') -----
next: n into: aCollection startingAt: startIndex
"Read n objects into the given collection.
+ Return aCollection or a partial copy if less than n elements have been read."
+
+ | count |
+ count := self readInto: aCollection startingAt: startIndex count: n.
+ count = n
+ ifTrue:[ ^aCollection ]
+ ifFalse:[ ^aCollection copyFrom: 1 to: startIndex + count - 1 ]!
- Return aCollection or a partial copy if less than
- n elements have been read."
- | obj |
- 0 to: n-1 do:[:i|
- (obj := self next) == nil ifTrue:[^aCollection copyFrom: 1 to: startIndex+i-1].
- aCollection at: startIndex+i put: obj].
- ^aCollection!
More information about the Squeak-dev
mailing list
|