Levente Uzonyi uploaded a new version of Collections to project The Trunk:
http://source.squeak.org/trunk/Collections-ul.738.mcz ==================== Summary ==================== Name: Collections-ul.738 Author: ul Time: 27 February 2017, 12:50:24.923499 am UUID: 3cdaac93-5a62-4fb6-8037-4323767c63a1 Ancestors: Collections-ul.737 Part #3 of Improve SequenceableCollection's index-related search methods - fixed typo in #indexOf:startingAt:ifAbsent: - trimmed unnecessary #ifAbsent: sends - improved a few methods =============== Diff against Collections-ul.737 =============== Item was changed: ----- 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) ] ]! - | 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 := self indexOfAnyOf: CharacterSet nonSeparators - startingAt: end+1 ifAbsent: [ nil ]. - beginning ~~ nil ] whileTrue: [ - "find the end" - end := self indexOfAnyOf: CharacterSet separators - startingAt: beginning ifAbsent: [ self size + 1 ]. - end := end - 1. - result nextPut: (self copyFrom: beginning to: end). - ]. - ^result contents! Item was changed: ----- Method: RWBinaryOrTextStream>>upTo: (in category 'accessing') ----- upTo: anObject "fast version using indexOf:" | start end | - start := position+1. isBinary ifTrue: [ anObject isInteger ifFalse: [ ^self upToEnd ] ] ifFalse: [ anObject isCharacter ifFalse: [ ^self upToEnd ] ]. + start := position + 1. + end := collection indexOf: anObject asCharacter startingAt: start. - end := collection indexOf: anObject asCharacter startingAt: start ifAbsent: [ 0 ]. "not present--return rest of the collection" (end = 0 or: [end > readLimit]) ifTrue: [ ^self upToEnd ]. "skip to the end and return the data passed over" position := end. ^((isBinary ifTrue: [ ByteArray ] ifFalse: [ String ]) new: end - start) replaceFrom: 1 to: end - start with: collection startingAt: start! Item was changed: ----- Method: ReadStream>>upToAnyOf:do: (in category 'accessing') ----- upToAnyOf: aCollection do: aBlock "Overriden for speed" | end result | + end := collection indexOfAnyOf: aCollection startingAt: 1 + position. - end := collection indexOfAnyOf: aCollection startingAt: 1 + position ifAbsent: [0]. (end = 0 or: [end > readLimit]) ifTrue: [^self upToEnd]. result := collection copyFrom: 1 + position to: -1 + end. position := end. aBlock value: (collection at: end). ^result! Item was changed: ----- Method: SequenceableCollection>>indexOf:startingAt:ifAbsent: (in category 'accessing') ----- indexOf: anElement startingAt: start ifAbsent: exceptionBlock "Answer the index of the first occurence of anElement after start within the receiver. If the receiver does not contain anElement, answer the result of evaluating the argument, exceptionBlock." | index | + (index := self indexOf: anElement startingAt: start) = 0 ifFalse: [ ^index ]. - (index := self indexOf: start startingAt: start) = 0 ifFalse: [ ^index ]. ^exceptionBlock value! Item was changed: ----- Method: String>>withBlanksTrimmed (in category 'converting') ----- withBlanksTrimmed "Return a copy of the receiver from which leading and trailing blanks have been trimmed." | first last | + first := self indexOfAnyOf: CharacterSet nonSeparators startingAt: 1. - first := self indexOfAnyOf: CharacterSet nonSeparators startingAt: 1 ifAbsent: [0]. first = 0 ifTrue: [ ^'' ]. "no non-separator character" last := self lastIndexOfAnyOf: CharacterSet nonSeparators startingAt: self size ifAbsent: [self size]. (first = 1 and: [ last = self size ]) ifTrue: [ ^self copy ]. ^self copyFrom: first to: last ! |
Free forum by Nabble | Edit this page |