Comment #2 by bearophile_hugs — 2013-03-12T06:16:47Z
Regarding this code I have two comments:
C[] stripRight(C)(C[] str)
if(isSomeChar!C)
{
foreach_reverse(i, dchar c; str)
{
if(!std.uni.isWhite(c))
return str[0 .. i + codeLength!C(c)];
}
return str[0 .. 0];
}
1) Isn't it enough a "return null;" at the end?
2) When I see such string functions I often think about stripping leading values from a generic 1D array:
[0,0,0,0,10,7,1234,0]
Comment #3 by andrej.mitrovich — 2013-03-12T06:28:25Z
(In reply to comment #2)
> Regarding this code I have two comments:
>
> C[] stripRight(C)(C[] str)
> if(isSomeChar!C)
> {
> foreach_reverse(i, dchar c; str)
> {
> if(!std.uni.isWhite(c))
> return str[0 .. i + codeLength!C(c)];
> }
>
> return str[0 .. 0];
> }
>
>
> 1) Isn't it enough a "return null;" at the end?
It's enough but it's different. At the call site !is null checks will depend on what is returned here.
> 2) When I see such string functions I often think about stripping leading
> values from a generic 1D array:
> [0,0,0,0,10,7,1234,0]
I don't know what is being asked here.
Comment #4 by monarchdodra — 2013-03-12T07:04:38Z
(In reply to comment #3)
> (In reply to comment #2)
> > Regarding this code I have two comments:
> >
> > C[] stripRight(C)(C[] str)
> > if(isSomeChar!C)
> > {
> > foreach_reverse(i, dchar c; str)
> > {
> > if(!std.uni.isWhite(c))
> > return str[0 .. i + codeLength!C(c)];
> > }
> >
> > return str[0 .. 0];
> > }
> >
> >
> > 1) Isn't it enough a "return null;" at the end?
>
> It's enough but it's different. At the call site !is null checks will depend on
> what is returned here.
Further more, "strip" returns a "sub slice" of the original slice. If you return null, then "sameHead(str, stripRight(str))" will not be guaranteed.
Very very minor points, but I see no reason to do things wrong when you can do them right.
besides, str[0 .. 0] doesn't trigger bounds checking, so there is no overhead compared to null anyways.
> > 2) When I see such string functions I often think about stripping leading
> > values from a generic 1D array:
> > [0,0,0,0,10,7,1234,0]
>
> I don't know what is being asked here.
He's basically saying there's no real reason for strip to be limited to just strings, and could operate on arrays or ranges.
I'd kind of agree, but given our current clusterfuck with splitter, I think we need to think long and hard before adding anything.
Comment #5 by andrej.mitrovich — 2013-03-12T14:04:55Z
I'll work on this some other time unless someone else implements it before me.
Andrei now wants this to be completely generic and put into std.algorithm.
Comment #6 by bearophile_hugs — 2013-03-12T14:12:52Z
(In reply to comment #5)
> I'll work on this some other time unless someone else implements it before me.
>
> Andrei now wants this to be completely generic and put into std.algorithm.
In my code 99% of times I want to strip strings. Only once in a lot of time I'd like to strip a generic 1D array.
Comment #7 by andrej.mitrovich — 2013-05-27T04:33:56Z