cmp and icmp.

Damian damianday at hotmail.co.uk
Thu Jul 4 16:56:11 PDT 2013


On Thursday, 4 July 2013 at 23:10:12 UTC, Jonathan M Davis wrote:
> On Friday, July 05, 2013 00:36:02 Damian wrote:
>> On Thursday, 4 July 2013 at 22:02:06 UTC, bearophile wrote:
>> > Damian:
>> >> Why don't these functions take a length parameter, like 
>> >> strcmp
>> >> and memcmp?
>> >> Is it worth making an enhancement request for such?
>> > 
>> > Probably slicing of their inputs, or using std.range.take() 
>> > of
>> > their inputs, is enough. Do you agree?
>> > 
>> > Bye,
>> > bearophile
>> 
>> Ah but with slicing the inputs, you must check the length first
>> so that you don't get an out of bounds error. I would prefer it
>> if cmp
>> did this for me, since it is going to check lengths anyway.
>
> Except that cmp doesn't check the length. It just keeps popping 
> elements until
> one of the two ranges is empty. Taking a length which it had to 
> check would
> make it _less_ efficient, not more. The correct thing to do 
> here is indeed to
> slice the range if it can be sliced or to use take if it can't 
> be sliced. And
> if you want to slice the range and are worried about length, 
> then just use min
> to make sure that you don't pass a length which is too large.
>
> - Jonathan M Davis

In the example I gave startsWith is fine, but I also need case 
insensitive comparison, take and icmp, however, does seem to fit 
the bill perfectly.


More information about the Digitalmars-d mailing list