[Pkg] The Trunk: Collections-eem.1024.mcz
commits at source.squeak.org
commits at source.squeak.org
Wed Nov 23 03:38:00 UTC 2022
Eliot Miranda uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-eem.1024.mcz
==================== Summary ====================
Name: Collections-eem.1024
Author: eem
Time: 22 November 2022, 7:37:55.158009 pm
UUID: 4c57a48d-50a0-4209-a01b-643c0da598f6
Ancestors: Collections-eem.1023
Replace the two implementations of [Byte]String>>substrings with one using the same scheme as SequenceableCollection>>subStrings:; it's at least 23% faster.
=============== Diff against Collections-eem.1023 ===============
Item was removed:
- ----- Method: ByteString>>substrings (in category 'converting') -----
- substrings
- "Answer an array of the substrings that compose the receiver."
-
- ^Array streamContents: [ :stream |
- | end start |
- end := 1.
- "find one substring each time through this loop"
- [ "find the beginning of the next substring"
- (start := self
- indexOfAnyOf: CharacterSet nonSeparators
- startingAt: end) = 0 ]
- whileFalse: [
- "find the end"
- end := self
- indexOfAnyOf: CharacterSet separators
- startingAt: start
- ifAbsent: [ self size + 1 ].
- stream nextPut: (self copyFrom: start to: end - 1) ] ]!
Item was changed:
----- Method: String>>substrings (in category 'converting') -----
substrings
"Answer an array of the substrings that compose the receiver."
+ | result size subsequenceStart |
+ result := OrderedCollection new.
+ size := self size.
+ 1 to: size do:
+ [:i|
+ (self at: i) isSeparator
+ ifTrue:
+ [subsequenceStart ifNotNil:
+ [result addLast: (self copyFrom: subsequenceStart to: i - 1)].
+ subsequenceStart := nil]
+ ifFalse:
+ [subsequenceStart ifNil: [subsequenceStart := i]]].
+ subsequenceStart ifNotNil:
+ [result addLast: (self copyFrom: subsequenceStart to: size)].
+ ^result asArray
+ !
- | result end beginning |
- result := WriteStream on: (Array new: 10).
- end := 0.
- "find one substring each time through this loop"
- [ "find the beginning of the next substring"
- beginning := end+1.
- [beginning <= self size and:[(self at: beginning) isSeparator]]
- whileTrue:[beginning := beginning + 1].
- beginning <= self size] whileTrue: [
- "find the end"
- end := beginning.
- [end <= self size and:[(self at: end) isSeparator not]]
- whileTrue:[end := end + 1].
- end := end - 1.
- result nextPut: (self copyFrom: beginning to: end).
- ].
- ^result contents!
More information about the Packages
mailing list