<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=utf-8"><meta name=Generator content="Microsoft Word 12 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:Tahoma;
        panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-reply;
        font-family:"Calibri","sans-serif";
        color:#1F497D;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-NZ link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I thought similarly but was too busy to reply.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>As the developers of the core library used by everyone one of Embarcadero’s goals is to keep the code efficient. Thus they have somewhat legitimate reasons to duplicate code so long as there are benefits and they avoid the corresponding downsides of code duplication, in particular divergence in different copies of the same code. Of course given the difference in the GetUnicodeCategory calls (as also pointed out by Jolyon) one has to wonder if the code hasn’t already diverged! But there could be a good reason for the copies being different too...<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>One would also hope both copies of the routine were commented to point out there were two versions and the reason why – does anyone know if Embarcadero’s comments get stripped before the source goes out to us or do they just not comment their code? ;-)<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>David.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p>&nbsp;</o:p></span></p><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm 0cm 0cm'><p class=MsoNormal><b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span lang=EN-US style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> delphi-bounces@listserver.123.net.nz [mailto:delphi-bounces@listserver.123.net.nz] <b>On Behalf Of </b>Jolyon Smith<br><b>Sent:</b> Sunday, 3 June 2012 9:03 p.m.<br><b>To:</b> todd.martin.nz@gmail.com; NZ Borland Developers Group - Delphi List<br><b>Subject:</b> Re: [DUG] Why re-use when you can duplicate!<o:p></o:p></span></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>Arguably it's an optimisation. &nbsp;This isn't code that is likely to change and incurring an additional function call for such a small snippet of code for the kind of processing such checks might be involved in could be a significant overhead.<o:p></o:p></p><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>They could have &quot;inline&quot;d it I guess, but there are all sorts of things that seem to break inlining in Delphi (as in &quot;cause to be rejected by the compiler&quot;) and this might fall foul of those.<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div><div><p class=MsoNormal>Another explanation (perhaps also optimisation related) might lie in the fact that it isn't a perfect duplication... note the slight differences in the call that the first makes to INTERNALGetUnicodeCategory(UCS4Char), whilst the second uses GetUnicodeCategory(String, Index). &nbsp;Then again, this might also be a sub-optimal variation. &nbsp;Hard to say without probing deeper than is warranted at this point.<br><br>:)<o:p></o:p></p></div><div><p class=MsoNormal><o:p>&nbsp;</o:p></p><div><p class=MsoNormal>On 3 June 2012 12:15, Todd &lt;<a href="mailto:todd.martin.nz@gmail.com" target="_blank">todd.martin.nz@gmail.com</a>&gt; wrote:<o:p></o:p></p><p class=MsoNormal>Is this a representative example of the code quality Embarcadero is<br>producing today?<br><br>class function TCharacter.IsNumber(C: Char): Boolean;<br>begin<br>&nbsp;if not IsLatin1(C) then<br>&nbsp; &nbsp;Result := CheckNumber(InternalGetUnicodeCategory(UCS4Char(C)))<br>&nbsp;else if not IsAscii(C) then<br>&nbsp; &nbsp;Result := CheckNumber(InternalGetLatin1Category(C))<br>&nbsp;else<br>&nbsp; &nbsp;Result := (C &gt;= '0') and (C &lt;= '9');<br>end;<br><br>class function TCharacter.IsNumber(const S: string; Index: Integer):<br>Boolean;<br>var<br>&nbsp;C: Char;<br>begin<br>&nbsp;CheckStringRange(S, Index);<br>&nbsp;C := S[Index];<br>&nbsp;if not IsLatin1(C) then<br>&nbsp; &nbsp;Result := CheckNumber(GetUnicodeCategory(S, Index))<br>&nbsp;else if not IsAscii(C) then<br>&nbsp; &nbsp;Result := CheckNumber(InternalGetLatin1Category(C))<br>&nbsp;else<br>&nbsp; &nbsp;Result := (C &gt;= '0') and (C &lt;= '9');<br>end;<br><br>Todd.<br>_______________________________________________<br>NZ Borland Developers Group - Delphi mailing list<br>Post: <a href="mailto:delphi@listserver.123.net.nz">delphi@listserver.123.net.nz</a><br>Admin: <a href="http://delphi.org.nz/mailman/listinfo/delphi" target="_blank">http://delphi.org.nz/mailman/listinfo/delphi</a><br>Unsubscribe: send an email to <a href="mailto:delphi-request@listserver.123.net.nz">delphi-request@listserver.123.net.nz</a> with Subject: unsubscribe<o:p></o:p></p></div><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></div></body></html>