Thomas Martitz wrote:
> 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

That look right. Zero is a valid number. A leading zero before a zero is
still zero.

00 -> 0
0b -> 0b
01 -> 1
1  -> 1

01 == 1
strcmp -> 01 < 1

right?



> 
> 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