findSplit

Array-specialization of findSplit with default predicate.

Examples

const h = "a**b";
const r = h.findSplit("**");
assert(r);
assert(r.pre is h[0 .. 1]);
assert(r.separator is h[1 .. 3]);
assert(r.post is h[3 .. 4]);
version (unittest) {
	static auto f()() @safe pure nothrow { char[1] x = "_"; return x[].findSplit(" "); }
	static if (hasPreviewDIP1000) static assert(!__traits(compiles, { auto _ = f(); }));
}
const h = "a**b";
const r = h.findSplit("_");
static assert(r.sizeof == 2 * 2 * size_t.sizeof);
assert(!r);
assert(r.pre is h);
assert(r.separator is h[$ .. $]);
assert(r.post is h[$ .. $]);
import std.algorithm.searching : findSplit;
const h = "a**b";
const r = h.findSplit("_");
static assert(r.sizeof == 3 * 2 * size_t.sizeof);
assert(!r);
assert(r[0] is h);
assert(r[1] is h[$ .. $]);
assert(r[2] is h[$ .. $]);
const r = "a*b".findSplit('*');
static assert(r.sizeof == 3 * size_t.sizeof);
assert(r);
assert(r.pre == "a");
assert(r.separator == "*");
assert(r.post == "b");
version (unittest) {
	static auto f()() @safe pure nothrow { char[1] x = "_"; return x[].findSplit(' '); }
	static if (hasPreviewDIP1000) static assert(!__traits(compiles, { auto _ = f(); }));
}

DIP-1000 scope analysis

char[] f() @safe pure nothrow
{
	char[3] haystack = "a*b";
	auto r = haystack[].findSplit('*');
	static assert(is(typeof(r.pre()) == char[]));
	return r.pre();		 /+ TODO: this should fail +/
}
f();

See Also

Meta