[squeak-dev] The Trunk: Collections-nice.775.mcz

Nicolas Cellier nicolas.cellier.aka.nice at gmail.com
Fri Dec 1 01:45:15 UTC 2017


Sorry for introducing a few Undeclared at this stage...
They should disappear at next update.

2017-12-01 1:25 GMT+01:00 <commits at source.squeak.org>:

> Nicolas Cellier uploaded a new version of Collections to project The Trunk:
> http://source.squeak.org/trunk/Collections-nice.775.mcz
>
> ==================== Summary ====================
>
> Name: Collections-nice.775
> Author: nice
> Time: 1 December 2017, 1:25:19.882602 am
> UUID: 5ef7a80c-6213-4e8e-8f0c-b45e110ce15e
> Ancestors: Collections-nice.774
>
> Rename CharacterSet -> ByteCharacterSet
>
> This is step 1:
> - create a parallel ByteCharacterSet
> - then mutate CharacterSet instances -> ByteCharacterSet in postscript
>
> =============== Diff against Collections-nice.774 ===============
>
> Item was added:
> + ----- Method: AbstractCharacterSet>>species (in category 'private') -----
> + species
> +       ^CharacterSet!
>
> Item was added:
> + Collection subclass: #ByteCharacterSet
> +       instanceVariableNames: 'byteArrayMap tally'
> +       classVariableNames: 'CrLf NonSeparators Separators'
> +       poolDictionaries: ''
> +       category: 'Collections-Support'!
> +
> + !ByteCharacterSet commentStamp: '<historical>' prior: 0!
> + A set of characters.  Lookups for inclusion are very fast.!
>
> Item was added:
> + ----- Method: ByteCharacterSet class>>allCharacters (in category
> 'instance creation') -----
> + allCharacters
> +       "return a set containing all characters"
> +
> +       | set |
> +       set := self empty.
> +       0 to: 255 do: [ :ascii | set add: (Character value: ascii) ].
> +       ^set!
>
> Item was added:
> + ----- Method: ByteCharacterSet class>>cleanUp: (in category
> 'initialize-release') -----
> + cleanUp: aggressive
> +
> +       CrLf := NonSeparators := Separators := nil!
>
> Item was added:
> + ----- Method: ByteCharacterSet class>>crlf (in category 'accessing')
> -----
> + crlf
> +
> +       ^CrLf ifNil: [ CrLf := self with: Character cr with: Character lf
> ]!
>
> Item was added:
> + ----- Method: ByteCharacterSet class>>empty (in category 'instance
> creation') -----
> + empty
> +       "return an empty set of characters"
> +       ^self new!
>
> Item was added:
> + ----- Method: ByteCharacterSet class>>newFrom: (in category 'instance
> creation') -----
> + newFrom: aCollection
> +       | newCollection |
> +       newCollection := self new.
> +       newCollection addAll: aCollection.
> +       ^newCollection!
>
> Item was added:
> + ----- Method: ByteCharacterSet class>>nonSeparators (in category
> 'accessing') -----
> + nonSeparators
> +       "return a set containing everything but the whitespace characters"
> +
> +       ^NonSeparators ifNil: [
> +               NonSeparators := self separators complement ]!
>
> Item was added:
> + ----- Method: ByteCharacterSet class>>separators (in category
> 'accessing') -----
> + separators
> +       "return a set containing just the whitespace characters"
> +
> +       ^Separators ifNil: [ Separators := self newFrom: Character
> separators ]!
>
> Item was added:
> + ----- Method: ByteCharacterSet class>>withAll: (in category 'instance
> creation') -----
> + withAll: aCollection
> +       "Create a new ByteCharacterSet containing all the characters from
> aCollection."
> +
> +       ^self newFrom: aCollection!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>= (in category 'comparing') -----
> + = anObject
> +
> +       self species == anObject species ifFalse: [ ^false ].
> +       anObject size = tally ifFalse: [ ^false ].
> +       ^self byteArrayMap = anObject byteArrayMap!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>add: (in category 'adding') -----
> + add: aCharacter
> +       "I automatically become a WideByteCharacterSet if you add a wide
> character to myself"
> +
> +       | index |
> +       (index := aCharacter asInteger + 1) <= 256 ifFalse: [
> +               | wide |
> +               wide := WideCharacterSet new.
> +               wide addAll: self.
> +               wide add: aCharacter.
> +               self becomeForward: wide.
> +               ^aCharacter ].
> +       (byteArrayMap at: index) = 1 ifFalse: [
> +               byteArrayMap at: index put: 1.
> +               tally := tally + 1 ].
> +       ^aCharacter!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>asString (in category 'conversion') -----
> + asString
> +       "Convert the receiver into a String"
> +
> +       ^String new: self size streamContents:[:s|
> +               self do:[:ch| s nextPut: ch].
> +       ].!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>byteArrayMap (in category 'private')
> -----
> + byteArrayMap
> +       "return a ByteArray mapping each ascii value to a 1 if that ascii
> value is in the set, and a 0 if it isn't.  Intended for use by primitives
> only"
> +       ^byteArrayMap!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>byteComplement (in category
> 'conversion') -----
> + byteComplement
> +       "return a character set containing precisely the single byte
> characters the receiver does not"
> +
> +       | set |
> +       set := ByteCharacterSet allCharacters.
> +       self do: [ :c | set remove: c ].
> +       ^set!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>complement (in category 'conversion')
> -----
> + complement
> +       "return a character set containing precisely the characters the
> receiver does not"
> +
> +       ^ByteCharacterSetComplement of: self copy!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>do: (in category 'enumerating') -----
> + do: aBlock
> +       "evaluate aBlock with each character in the set"
> +
> +       | index |
> +       tally >= 128 ifTrue: [ "dense"
> +               index := 0.
> +               [ (index := index + 1) <= 256 ] whileTrue: [
> +                       (byteArrayMap at: index) = 1 ifTrue: [
> +                               aBlock value: (Character value: index - 1)
> ] ].
> +               ^self ].
> +       "sparse"
> +       index := 0.
> +       [ (index := byteArrayMap indexOf: 1 startingAt: index + 1) = 0 ]
> whileFalse: [
> +               aBlock value: (Character value: index - 1) ].
> +       !
>
> Item was added:
> + ----- Method: ByteCharacterSet>>findFirstInByteString:startingAt: (in
> category 'zap me later') -----
> + findFirstInByteString: aByteString startingAt: startIndex
> +       "Double dispatching: since we know this is a ByteString, we can
> use a superfast primitive using a ByteArray map with 0 slots for byte
> characters not included and 1 for byte characters included in the receiver."
> +       ^ByteString
> +               findFirstInString: aByteString
> +               inSet: self byteArrayMap
> +               startingAt: startIndex!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>hasWideCharacters (in category
> 'testing') -----
> + hasWideCharacters
> +       ^false!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>hash (in category 'comparing') -----
> + hash
> +       ^self byteArrayMap hash!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>includes: (in category 'testing') -----
> + includes: anObject
> +
> +       | index |
> +       anObject isCharacter ifFalse: [ ^false ].
> +       (index := anObject asInteger + 1) > 256 ifTrue: [ ^false ].
> +       ^(byteArrayMap at: index) > 0!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>initialize (in category 'private') -----
> + initialize
> +
> +       byteArrayMap := ByteArray new: 256.
> +       tally := 0!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>isEmpty (in category 'testing') -----
> + isEmpty
> +       ^tally = 0!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>occurrencesOf: (in category 'zap me
> later') -----
> + occurrencesOf: anObject
> +       "Answer how many of the receiver's elements are equal to anObject.
> Optimized version."
> +
> +       (self includes: anObject) ifTrue: [ ^1 ].
> +       ^0!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>postCopy (in category 'copying') -----
> + postCopy
> +       super postCopy.
> +       byteArrayMap := byteArrayMap copy!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>remove: (in category 'removing') -----
> + remove: aCharacter
> +
> +       ^self remove: aCharacter ifAbsent: aCharacter!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>remove:ifAbsent: (in category
> 'removing') -----
> + remove: aCharacter ifAbsent: aBlock
> +
> +       | index |
> +       (index := aCharacter asciiValue + 1) <= 256 ifFalse: [ ^aBlock
> value ].
> +       (byteArrayMap at: index) = 0 ifTrue: [ ^aBlock value ].
> +       byteArrayMap at: index put: 0.
> +       tally := tally - 1.
> +       ^aCharacter!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>removeAll (in category 'removing') -----
> + removeAll
> +
> +       byteArrayMap atAllPut: 0.
> +       tally := 0!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>size (in category 'accessing') -----
> + size
> +
> +       ^tally!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>species (in category 'zap me later')
> -----
> + species
> +       ^CharacterSet!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>union: (in category 'enumerating') -----
> + union: aCollection
> +       (self species = aCollection species or: [aCollection isString or:
> [aCollection allSatisfy: [:e | e isCharacter]]]) ifFalse: [^super union:
> aCollection].
> +       (self species = aCollection species and: [self class ~=
> aCollection class]) ifTrue: [^aCollection union: self].
> +       ^self copy addAll: aCollection; yourself!
>
> Item was added:
> + ----- Method: ByteCharacterSet>>wideCharacterMap (in category
> 'private') -----
> + wideCharacterMap
> +       "used for comparing with WideByteCharacterSet"
> +
> +       | wide |
> +       wide := WideByteCharacterSet new.
> +       wide addAll: self.
> +       ^wide wideCharacterMap!
>
> Item was changed:
>   ----- Method: CharacterSet class>>crlf (in category 'accessing') -----
>   crlf
>
> +       ^CrLf ifNil: [ CrLf := ByteCharacterSet with: Character cr with:
> Character lf ]!
> -       ^CrLf ifNil: [ CrLf := self with: Character cr with: Character lf
> ]!
>
> Item was changed:
>   ----- Method: CharacterSet class>>empty (in category 'instance
> creation') -----
>   empty
>         "return an empty set of characters"
> +       ^ByteCharacterSet new!
> -       ^self new!
>
> Item was changed:
>   ----- Method: CharacterSet class>>newFrom: (in category 'instance
> creation') -----
>   newFrom: aCollection
>         | newCollection |
> +       newCollection := ByteCharacterSet new.
> -       newCollection := self new.
>         newCollection addAll: aCollection.
>         ^newCollection!
>
> Item was removed:
> - ----- Method: CharacterSetComplement>>findFirstInByteString:startingAt:
> (in category 'enumerating') -----
> - findFirstInByteString: aByteString startingAt: startIndex
> -       "Double dispatching: since we know this is a ByteString, we can
> use a superfast primitive using a ByteArray map with 0 slots for byte
> characters not included and 1 for byte characters included in the receiver."
> -       ^ByteString
> -               findFirstInString: aByteString
> -               inSet: self byteArrayMap
> -               startingAt: startIndex!
>
> Item was removed:
> - ----- Method: WideCharacterSet>>findFirstInByteString:startingAt: (in
> category 'enumerating') -----
> - findFirstInByteString: aByteString startingAt: startIndex
> -       "Double dispatching: since we know this is a ByteString, we can
> use a superfast primitive using a ByteArray map with 0 slots for byte
> characters not included and 1 for byte characters included in the receiver."
> -
> -       ^ByteString
> -               findFirstInString: aByteString
> -               inSet: byteArrayMap
> -               startingAt: startIndex!
>
> Item was removed:
> - ----- Method: WideCharacterSet>>species (in category 'comparing') -----
> - species
> -       ^self hasWideCharacters
> -               ifTrue: [WideCharacterSet]
> -               ifFalse: [CharacterSet]!
>
> Item was changed:
> + (PackageInfo named: 'Collections') postscript: 'CharacterSet
> allInstancesDo: [:e | ByteCharacterSet adoptInstance: e ]'!
> - (PackageInfo named: 'Collections') postscript: 'CharacterSet
> allInstancesDo: #size'!
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20171201/383137db/attachment-0001.html>


More information about the Squeak-dev mailing list