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.