On 3/4/13 10:39 AM, Steven Schveighoffer wrote:
struct MySplitter
{
private string s;
private string separator;
private string source;
this(string src, string sep)
{
source = src;
separator = sep;
popFront();
}

@property string front()
{
return s;
}

@property bool empty()
{
return s.ptr == null;
}

void popFront()
{
if(!source.length)
{
s = source;
source = null;
}
else
{
size_t i = 0;
bool found = false;
for(; i + separator.length <= source.length; i++)
{
if(source[i] == separator[0])
{
found = true;
for(size_t j = i+1, k=1; k < separator.length; ++j, ++k)
if(source[j] != separator[k])
{
found = false;
break;
}
if(found)
break;
}
}
s = source[0..i];
if(found)
source = source[i + separator.length..$];
else
source = source[$..$];
}
}
}

Takes 7 seconds on my machine instead of 6, but not 10 like
std.algorithm.splitter. I don't even like the loop that well, it looks
crude, I can probably optimize it further.

And it does not use any of your specified tricks.

Is this sufficiently comparable, or am I missing something else?

-Steve

That's comparable, please file an enh request.


Thanks,

Andrei

Reply via email to