[fpc-devel] Stringlist customsort

Franz Müller office at focusdata.at
Thu Nov 29 20:32:11 CET 2018

Hi everybody!

Currently, the implementation of cutomsorted stringlists ist very far 
from satisfactory; you have to call the sort routine again whenever a 
string is added to the stringlist or an item is changed, because the 
stringlist cannot keep itself automatically sorted using a custom 
compare function. There is a better implemetation using the 
"experimental" define FPC_TESTGENERICS, but this code has not become 
"mainstream" FPC for a long time now, and I feel that the use of 
generics for the implementation of stringlists will also introduce quite 
some unnecessary overhead.

I would like to propose one of two versions of improvement of the 
non-FPC_TESTGENERICS TStringlist, that I would also be willing to 
program and to submit a patch for it.

Variation one:

Just add a property OnSort of type TListSortCompare and always sort 
using the user-provided function if the property is not nil. Automatic 
sorting would only occur if sortstyle=sslauto, while the behaviour for 
sortstyle=ssluser would remain as before for backward compatibility.

Variation two, more flexible:

Add a property OnSort of type TStringListSortCompare, which would allow 
stringlists to be sorted not only by the value of the string, but also 
by the value of the fields of the associated object. In that case it 
would be necessary to add a new sortstyle sslobject, which would have to 
be used when OnSort uses fields from the object for comparing, as in 
this case the find method cannot use binary search for locating an item, 
just like for unsorted stringlists (and the stringlist wouldn't know 
otherwise that it can't use binary search).


More information about the fpc-devel mailing list