Slower than Python

Andrei Alexandrescu SeeWebsiteForEmail at erdani.org
Mon Mar 4 09:35:23 PST 2013


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


More information about the Digitalmars-d mailing list