[squeak-dev] The Inbox: Collections-ul.874.mcz

Chris Muller asqueaker at gmail.com
Wed Feb 5 23:25:26 UTC 2020


Be sure to load Collections-ul.873 first.  When I tried to load this one
first directly, my image locked.


On Wed, Feb 5, 2020 at 9:47 AM <commits at source.squeak.org> wrote:

> Levente Uzonyi uploaded a new version of Collections to project The Inbox:
> http://source.squeak.org/inbox/Collections-ul.874.mcz
>
> ==================== Summary ====================
>
> Name: Collections-ul.874
> Author: ul
> Time: 5 February 2020, 4:40:30.240914 pm
> UUID: de45f7ed-0176-48ed-b7d5-3811cbc0fcb9
> Ancestors: Collections-ul.873
>
> - remove cruft and migration code from HashedCollection class >>
> #goodPrimeAtLeast:
>
> =============== Diff against Collections-ul.873 ===============
>
> Item was changed:
>   ----- Method: HashedCollection class>>goodPrimeAtLeast: (in category
> 'sizing') -----
>   goodPrimeAtLeast: lowerLimit
>         "Answer the smallest good prime >= lowerlimit.
>         If lowerLimit is larger than the largest known good prime, just
> make it odd.
>         Use linear search, and exponential search to speed up cases when
> lowerLimit is small (<2500 and <100000, respectively).
>         Assume that there are goodPrimes greater than 100000."
>
>         | highIndex midIndex lowIndex prime |
> -       lowerLimit <= 7 ifTrue: [
> -               lowerLimit <= 3 ifTrue: [ ^3 ].
> -               lowerLimit <= 5 ifTrue: [ ^5 ].
> -               ^7 ].
> -       GoodPrimes ifNil: [ "migration only"
> -               self initializeGoodPrimes ].
>         lowerLimit < 2500 ifTrue: [
>                 "Use linear search when the limit is small. The boundary
> is based on measurements."
> +               highIndex := 1.
> -               highIndex := 4. "skip 3 5 and 7"
>                 [ (GoodPrimes at: highIndex) < lowerLimit ] whileTrue: [
>                         highIndex := highIndex + 1 ].
>                 ^GoodPrimes at: highIndex ].
>         lowerLimit < 100000
>                 ifTrue: [
>                         "Use exponential search when the limit is not too
> large. The boundary is based on measurements."
>                         highIndex := 1.
>                         [ (GoodPrimes at: highIndex) < lowerLimit ]
> whileTrue: [
>                                 highIndex := highIndex * 2 ].
>                         lowIndex := highIndex // 2 + 1. "highIndex // 2
> was smaller than lowerLimit" ]
>                 ifFalse: [
>                         "Regular binary search."
>                         lowIndex := 1.
>                         highIndex := GoodPrimes size.
>                         "Check whether the largest prime would fit"
>                         (GoodPrimes at: highIndex) < lowerLimit ifTrue: [
>                                 ^lowerLimit bitOr: 1 ]. ].
>         [ highIndex - lowIndex <= 1 ] whileFalse: [
>                 midIndex := highIndex + lowIndex // 2.
>                 prime := GoodPrimes at: midIndex.
>                 lowerLimit < prime
>                         ifTrue: [ highIndex := midIndex ]
>                         ifFalse: [
>                                 lowerLimit > prime
>                                         ifTrue: [ lowIndex := midIndex ]
>                                         ifFalse: [ ^prime ] ] ].
>         (GoodPrimes at: lowIndex) >= lowerLimit ifTrue: [ ^GoodPrimes at:
> lowIndex ].
>         ^GoodPrimes at: highIndex!
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20200205/7f92314a/attachment.html>


More information about the Squeak-dev mailing list