On Monday, 20 April 2015 at 09:58:06 UTC, Marc Schütz wrote:
On Monday, 20 April 2015 at 09:07:54 UTC, Chris wrote:
On Saturday, 18 April 2015 at 17:59:19 UTC, ketmar wrote:
On Sat, 18 Apr 2015 17:50:56 +0000, Chris wrote:

Doh! You're right! My bad. However, this makes the function less
generic, but it doesn't matter here.

maybe `auto ref` can help here?

Yes, auto ref does the trick. I prefer it to passing the slice by value, because I can extend the function to cater for more types. My implementation (which is different from the one posted above) works also with strings, for example. Anyway, it gave me a performance boost of ~2.7 times as compared to the workarounds I had. This was well worth it!

Strings are slices, too. `string` is equivalent to `immutable(char)[]`.

I know. My function returns an array of the same type (size_t[] or a string (immutable(char)[] or whatever). With auto ref I can pass a string without having to slice it, like so

string a = "bla";
string b = "blub";

auto res = doSomething(a, b);

If I didn't use "auto ref" or "ref", string would get copied, wouldn't it?

auto ref doSomething(R needle, R haystack);

To avoid this, I would have to write a[0..$], b[0..$], which is not nice. Right or wrong?

For the record, I put the function inside a struct which again boosted the performance. No it is faster by a factor of ~3.17. Using the struct is even slightly faster than executing the same code directly within the for loop. That surprised me.

Reply via email to