[fpc-devel] Who maintains TDictionary? // Re: RFC: Improvements for TDictionary and other hash containers

Michael Van Canneyt michael at freepascal.org
Sun Apr 13 21:39:26 CEST 2025



On Sun, 13 Apr 2025, Martin Frb via fpc-devel wrote:

> When the mailer decides to sent....
>
> On 13/04/2025 21:17, Martin Frb wrote:
>> On 13/04/2025 20:43, Michael Van Canneyt via fpc-devel wrote:
>>> 
>>> But why don't you simply use a TList<TRange> with your custom comparer ?
>>> You can then use List.BinarySearch() and retrieve the existing TRange at 
>>> once?
>>> 
>>> Your solution seems quite hackish to me. So if you really need it in 
>>> TDictionary, make it protected as you indicated...
>> 
>> Because there may be several 10000 entries (ok extreme case, I get 40000 
>> entries, after scanning several 100 files).
>> 
>> And entries are added over time.
>> When adding a new entry, the list must be sorted again. That is the slow 
>> part.
>> 
>> The old code used an AVL tree.
>> That is fine.
>> But uses more memory, that the TDictionary (even with the double pointer 
>> storage).
>
>> AVL tree, needs Left/rigt/balance, and because the range is not inheriting
> there is a separate node instance.
>
> Of course the dictionary varies depending on the amount of empty slots.
>
>
> If keys could be accessed by index (the internal slot), the
> TDictionary.IndexOfKey
> and
> TDictionary.Keys[idx]

That seems like a more 'conventional' solution to me.

I'll leave it up to you how to enhance TDictionary using either solution...

Michael.


More information about the fpc-devel mailing list