<div dir="ltr"><div dir="auto"><div><br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Em seg., 14 de nov. de 2022 15:26, Vojtěch Čihák via fpc-pascal <<a href="mailto:fpc-pascal@lists.freepascal.org" rel="noreferrer" target="_blank">fpc-pascal@lists.freepascal.org</a>> escreveu:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
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).<br>
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.<br>
<br>
Question: Is there a way how to *inline* compare function to sorting method in this general purpose generic abstract class?<br>
<br>
Thanks.<br>
<br>
PS: The gain is 6-7%. <br></blockquote></div></div><div dir="auto"><br></div><div dir="auto">Hi,</div><div dir="auto"><br></div><div dir="auto">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.<br></div><div dir="auto">
I'm curious how you got that 6% figure, it seems rather large.
Is this
comparing the parameter vs virtual method approach
or comparing a fully inline (no indirect call of any kind) sort function to some other option? Are you passing the variables by reference?</div><div dir="auto"><br></div><div>Best regards,</div><div>Flávio<br></div><div dir="auto"><br></div><div dir="auto"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
</blockquote></div></div></div>
</div>