# HG changeset patch # User Claus Gittinger # Date 1438598093 -7200 # Node ID fee4d5739a739a24d2c2cf4ef30328ac899faa18 # Parent fab035561c683f0c8df727fa381917b7e1482441 class: CharacterArray changed: #asLowercase #asUppercase tuned for regular strings diff -r fab035561c68 -r fee4d5739a73 CharacterArray.st --- a/CharacterArray.st Mon Aug 03 12:02:53 2015 +0200 +++ b/CharacterArray.st Mon Aug 03 12:34:53 2015 +0200 @@ -360,7 +360,6 @@ " ! ! - !CharacterArray class methodsFor:'pattern matching'! matchEscapeCharacter @@ -766,7 +765,6 @@ ^ Unicode32String ! ! - !CharacterArray methodsFor:'Compatibility-ANSI'! addLineDelimiters @@ -3139,22 +3137,42 @@ mySize := self size. mySize == 0 ifTrue:[^ self]. + newStr := self species new:mySize. bitsPerCharacter := newStr bitsPerCharacter. + "/ handle the very seldom case of an uppercase char which needs + "/ more bits in its lowercase variant + "/ (there are only a few of them) + + "/ for 8-bit strings, use faster code. + bitsPerCharacter == 8 ifTrue:[ + 1 to:mySize do:[:i | + c := (self at:i) asLowercase. + (c codePoint > 16rFF) ifTrue:[ + (c stringSpecies ~= newStr stringSpecies) ifTrue:[ + newStr := c stringSpecies fromString:newStr. + ] + ]. + newStr at:i put:c + ]. + ^ newStr + ]. + 1 to:mySize do:[:i | - c := (self at:i) asLowercase. - (c bitsPerCharacter > bitsPerCharacter - and:[c stringSpecies ~= newStr stringSpecies]) ifTrue:[ - newStr := c stringSpecies fromString:newStr. - ]. - newStr at:i put:c + c := (self at:i) asLowercase. + (c bitsPerCharacter > bitsPerCharacter + and:[c stringSpecies ~= newStr stringSpecies]) ifTrue:[ + newStr := c stringSpecies fromString:newStr. + ]. + newStr at:i put:c ]. ^ newStr " 'HelloWorld' asLowercase 'HelloWorld' asLowercaseFirst + 'HelloWorld' asUppercase " ! @@ -3546,12 +3564,30 @@ newStr := self species new:mySize. bitsPerCharacter := newStr bitsPerCharacter. + "/ handle the very seldom case of a lowercase char which needs + "/ more bits in its uppercase variant + "/ (there are only a few of them) + + "/ for 8-bit strings, use faster code. + bitsPerCharacter == 8 ifTrue:[ + 1 to:mySize do:[:i | + c := (self at:i) asUppercase. + (c codePoint > 16rFF) ifTrue:[ + (c stringSpecies ~= newStr stringSpecies) ifTrue:[ + newStr := c stringSpecies fromString:newStr. + ] + ]. + newStr at:i put:c + ]. + ^ newStr + ]. + 1 to:mySize do:[:i | - c := (self at:i) asUppercase. - c bitsPerCharacter > bitsPerCharacter ifTrue:[ - newStr := c stringSpecies fromString:newStr. - ]. - newStr at:i put:c + c := (self at:i) asUppercase. + c bitsPerCharacter > bitsPerCharacter ifTrue:[ + newStr := c stringSpecies fromString:newStr. + ]. + newStr at:i put:c ]. ^ newStr @@ -3559,6 +3595,7 @@ 'helloWorld' asUppercase 'helloWorld' asUppercaseFirst (Character value:16rB5) asString asUppercase -- needs 16 bits !! + (Character value:16rFF) asString asUppercase -- needs 16 bits !! " ! @@ -5739,7 +5776,6 @@ "Modified: 17.4.1997 / 12:50:23 / cg" ! ! - !CharacterArray methodsFor:'special string converting'! asUnixFilenameString @@ -6777,7 +6813,6 @@ " ! ! - !CharacterArray methodsFor:'substring searching'! findRangeOfString:subString