Bryan VanDyke wrote:
Thomas Martitz wrote:
Bryan VanDyke wrote:
Thomas Martitz wrote:
Linus Nielsen Feltzing wrote:
Mike Holden wrote:
Maybe leading zeros should only be stripped if another digit follows
them?

I use names like 00RockFaves.m3u, 00ClassicRock.m3u for playlists
that I
have created (as opposed to original artist albums), and the leading
zerozero is deliberately there to sort them at the top.
That's an interesting observation. I believe leading zeroes are
treated like whitespace in the current code, but in this case I think
that the final zero should be kept.

Linus
That's not trivial, and adds complexity.  You basically need to look at
the current, the next, and one more for this, instead of just the
current char.

Actually it not that bad.

Pseudo code:

get current
get next
while (current != null && next != null && current == '0' && next is a
number)
{
    current = next
    next = get next
}


Now imagine this for every char in a string, and for every string in a
file list (with some 100 files). It's three-times (or even more) more
complexity than just.
while (is_zero(a))
   a = next;

We're on embedded, and thus slow systems. Your would surely work well on
a desktop app, but for mp3-players we need fast and small code. The gain
has to justify the code, and I don't think it does it in this example.


What about something like this. Taking in consideration the isspace
function/comparison was removed? And isdigit is supposed to give nonzero
on nodigit values.

/* skip over leading zeros */
while ('0' == ca && nat_isdigit(ca_next) )
{
    ca = to_int(a[++ai]);
    ca_next = to_int(a[ai+1]);
}


I've found a simpler solution for this. Trying the code raises the following problem:

00 < 0b < 01 < 1

Zeros before except the final zeros are ignored, and the final zero before characters is not ignored. But the leading zeros of numbers are (so that 01 is 1). Obviously 0 sorts before 1.

Reply via email to