<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    Hi,
    <div class="moz-forward-container">
      <p>I have finished work on the improved stringlist. There are few
        changes in the public section:  A new public property
        OnCompareItems: TStringListSortCompare allows to define the
        compare function, while keeping sslAuto as sortstyle. If 
        OnCompareItems uses data from the object instead of or in
        addition to the string itself for sorting, the new public
        boolean property ObjectSort must be set to true; in that case, 
        the function Indexof will work like for unsorted strings.
        Finally, the find method can be called with an additional object
        as parameter, to allow finding of string-object combinations
        through binary search. I made a few minor improvements, too, so
        there is no speed penalty for the increased flexibiity.<br>
      </p>
      <p>But before finalizing the patch and submitting it to the
        bugtracker, I have some questions.</p>
      <p>1. It is not allowed to change an element of a sorted
        stringlist or insert a new string at some specific index. If
        that happens, SSortedListError is signaled. Shouldn't that also
        be the case when ExchangeItems is called on a sorted stringlist?
        I suggest adding the error message there too.</p>
      <p>2. Eventually, I can also address the randomization problem by
        making a non-random choice of the Pivot Element according to</p>
      <pre class="moz-quote-pre" wrap=""><i>On Fri, Nov 30, 2018 at 2:29 PM Andrea Mauri </i><i><a class="moz-txt-link-rfc2396E" href="mailto:andrea.mauri.75@gmail.com" moz-do-not-send="true"><andrea.mauri.75@gmail.com></a></i><i> wrote:

</i></pre>
      <blockquote type="cite" style="color: #000000;">
        <pre class="moz-quote-pre" wrap=""><i>if TStringList sort will be changed, please take into account the issue related to randomised pivot initialisation in TStringList sort and the consequences to Random sequence (</i><i><a class="moz-txt-link-freetext" href="http://forum.lazarus-ide.org/index.php?topic=43257.0" moz-do-not-send="true">http://forum.lazarus-ide.org/index.php?topic=43257.0</a></i><i>).
</i></pre>
      </blockquote>
      <div class="moz-text-plain" wrap="true" style="font-family:
        -moz-fixed; font-size: 14px;" lang="x-unicode">
        <pre class="moz-quote-pre" wrap=""><i>On Fri, Nov 30, 2018 at 2:29 PM Andrea Mauri </i><i><a class="moz-txt-link-rfc2396E" href="mailto:andrea.mauri.75@gmail.com" moz-do-not-send="true"><andrea.mauri.75@gmail.com></a></i><i> wrote:

</i></pre>
        <blockquote type="cite" style="color: #000000;">
          <pre class="moz-quote-pre" wrap=""><i>if TStringList sort will be changed, please take into account the issue related to randomised pivot initialisation in TStringList sort and the consequences to Random sequence (</i><i><a class="moz-txt-link-freetext" href="http://forum.lazarus-ide.org/index.php?topic=43257.0" moz-do-not-send="true">http://forum.lazarus-ide.org/index.php?topic=43257.0</a></i><i>).
</i></pre>
        </blockquote>
        <pre class="moz-quote-pre" wrap=""><i><a class="moz-txt-link-freetext" href="https://en.wikipedia.org/wiki/Quicksort#Choice_of_pivot" moz-do-not-send="true">https://en.wikipedia.org/wiki/Quicksort#Choice_of_pivot</a></i><i> suggest to
either use a random value as pivot or the mean of the first, middle
and last element.

Bart
</i></pre>
      </div>
      <p>However, I am sceptical whether that would be worth the
        overhead - whatever the overhead is, because it is absolutely
        unclear to me what is meant with "the mean of the first, middle
        and last element". You can caculate the mean for numbers, but
        not for strings. So I would rather leave these things as they
        are now.</p>
      <p>But maybe there is an easy way to save the state of the random
        number generator routine before sorting and to restore it when
        the sort is done?<br>
      </p>
      <p>3. The documentation should be updated. Is there a
        documentation about how to proceed to update the documentation
        for a class? There are a lot of different places with
        descriptions and explanations, I have no idea what to update and
        how to do that.</p>
      <p>4. Are there test cases to validate the new stringlist, to make
        sure no existing code is broken? I have tested everything I
        could think of, but there may be constellations that I don't
        imagine. As stringlists have certainly been thoroughly tested
        when they were first written, there may already exist some "test
        suite" to test the behaviour. That would be very helpful and I
        would be glad to run additional tests before submitting the
        patch.<br>
      </p>
      Franz<br>
    </div>
  </body>
</html>