[fpc-pascal] How to inline CompareFunc to Sort method in generic abstract class

Sven Barth pascaldragon at googlemail.com
Sat Nov 19 22:18:55 CET 2022


Am 18.11.2022 um 20:44 schrieb Flávio Etrusco via fpc-pascal:
>
>
> Em seg., 14 de nov. de 2022 15:26, Vojtěch Čihák via fpc-pascal 
> <fpc-pascal at lists.freepascal.org> escreveu:
>
>     Hi,
>
>     I wrote a generic abstract class - a list based on dynamic array
>     (i.e. array of T;) and this class can be specialized elsewhere
>     with any type (records or classes).
>     Part of the class is sorting. There are more ways how to deliver
>     *compare function* to sorting method. I can pass it as a parameter
>     or I can define it as: function Compare(A, B: T): Integer;
>     virtual; abstract;. But this way the function cannot be inlined.
>
>     Question: Is there a way how to *inline* compare function to
>     sorting method in this general purpose generic abstract class?
>
>     Thanks.
>
>     PS: The gain is 6-7%.
>
>
> Hi,
>
> What do you mean by "be inlined"? The 'inline' directive instructs the 
> compiler (or is it the linker? 😬) to try copying the whole function 
> inline, also avoiding the call (stack) setup; you can't do this for 
> this for a general purpose method.

Inlining is done by the compiler, not the linker. Also inlining does 
work for methods (at least in general; there are exceptions to this, 
e.g. if the method is virtual or uses "inherited"). What it can't be 
done with is method pointers (or function pointers).

Regards,
Sven
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freepascal.org/pipermail/fpc-pascal/attachments/20221119/32d3d7e2/attachment.htm>


More information about the fpc-pascal mailing list