Status: FixedWaitingToBePharoed Owner: stephane.ducasse Labels: Milestone-1.3 New issue 3431 by stephane.ducasse: Faster traitNames http://code.google.com/p/pharo/issues/detail?id=3431 Name: System-ul.398 Author: ul Time: 8 December 2010, 9:21:23.04 pm UUID: 8e147d50-061f-6741-8eb3-b8f69182a3de Ancestors: System-ul.397 - fix: SystemDictionary >> #traitNames returns a sorted collection. It also uses the cached nonClassNames which is faster. - added SystemDictionary >> #classAndTraitNames which returns a sorted collection of all class and trait names =============== Diff against System-ul.397 =============== Item was added: + ----- Method: SystemDictionary>>classAndTraitNames (in category 'classes and traits') ----- + classAndTraitNames + "Answer a sorted collection of all class and trait (not including class-traits) names. The performance of this algorithm is O(n) if the classNames are already cached, otherwise O(n*log(n)) where n is self size." + + | classNames traitNames result temporary | + classNames := self classNames. + traitNames := self traitNames. + temporary := Array new: classNames size + traitNames size. + result := temporary shallowCopy. + temporary + replaceFrom: 1 + to: classNames size + with: classNames + startingAt: 1; + replaceFrom: classNames size + 1 + to: temporary size + with: traitNames + startingAt: 1; + mergeFirst: 1 + middle: classNames size + last: temporary size + into: result + by: nil. + ^result! Item was changed: ----- Method: SystemDictionary>>traitNames (in category 'classes and traits') ----- traitNames + "Answer a sorted collection of all traits (not including class-traits) names." + + ^self nonClassNames select: [ :name | + (name beginsWith: 'AnObsolete') not and: [ + self + at: name + ifPresent: [ :global | global isInMemory and: [ global isTrait ] ] + ifAbsent: [ false ] ] ]! - "Answer a SortedCollection of all traits (not including class-traits) names." - | names | - names := OrderedCollection new. - self do: - [:cl | (cl isInMemory - and: [(cl isTrait) - and: [(cl name beginsWith: 'AnObsolete') not]]) - ifTrue: [names add: cl name]]. - ^ names!