Hi guys. I was checking MethodDictionary >> rehash and this is terribly slow because of the #become. Then I saw #rehashWithoutBecome� but it answers a different instance. I need a #rehash that does the rehash in the real object and answers self. So...I need the regular #rehash but I want to avoid the #become. Is that possible somehow?
This is the current implementation:
rehashWithoutBecome
��� | newInstance |
��� newInstance := self species new: self basicSize - 1. "Make sure it has the same capacity"
��� 1 to: self basicSize do: [ :index |
��� ��� (self basicAt: index) ifNotNil: [ :key |
��� ��� ��� newInstance at: key put: (array at: index) ] ].
��� ^newInstance
I am terrible bad with Collection and friends, but cannot we do soemthing like this:
rehashWithoutBecome
��� | newInstance |
��� newInstance := self species new: self basicSize - 1. "Make sure it has the same capacity"
���
��� 1 to: self basicSize do: [ :index |
��� ��� (self basicAt: index) ifNotNil: [ :key |
��� ��� ��� newInstance at: key put: (array at: index) ] ].
���
��� 1 to: newInstance basicSize do: [ :index |
��� ��� (newInstance basicAt: index) ifNotNil: [ :key |
��� ��� ��� self at: key put: (newInstance array at: index) ] ].
���
��� ^ self
Thanks for any help.
--
Mariano
http://marianopeck.wordpress.com