skipOver

Skip over the initial portion of the first given range (haystack) that matches any of the additionally given ranges (needles) fully, or if no second range is given skip over the elements that fulfill pred. Do nothing if there is no match.

  1. bool skipOver(Haystack haystack, Needles needles)
    template skipOver(alias pred = (a, b) => a == b)
    bool
    skipOver
    (
    Haystack
    Needles...
    )
    (
    ref Haystack haystack
    ,
    Needles needles
    )
    if (
    is(typeof(binaryFun!pred(haystack.front, needles[0].front))) &&
    &&
    &&
    )
  2. bool skipOver(R r1)
  3. bool skipOver(R r, Es es)

Members

Functions

skipOver
bool skipOver(Haystack haystack, Needles needles)
bool skipOver(R r1)
bool skipOver(R r, Es es)

Parameters

pred

The predicate that determines whether elements from each respective range match. Defaults to equality "a == b".

Examples

import std.algorithm.comparison : equal;

auto s1 = "Hello world";
assert(!skipOver(s1, "Ha"));
assert(s1 == "Hello world");
assert(skipOver(s1, "Hell") && s1 == "o world", s1);

string[]  r1 = ["abc", "def", "hij"];
dstring[] r2 = ["abc"d];
assert(!skipOver!((a, b) => a.equal(b))(r1, ["def"d]), r1[0]);
assert(r1 == ["abc", "def", "hij"]);
assert(skipOver!((a, b) => a.equal(b))(r1, r2));
assert(r1 == ["def", "hij"]);
import std.ascii : isWhite;
import std.range.primitives : empty;

auto s2 = "\t\tvalue";
auto s3 = "";
auto s4 = "\t\t\t";
assert(s2.skipOver!isWhite && s2 == "value");
assert(!s3.skipOver!isWhite);
assert(s4.skipOver!isWhite && s3.empty);

Variadic skipOver

auto s = "Hello world";
assert(!skipOver(s, "hello", "HellO"));
assert(s == "Hello world");

// the range is skipped over the longest matching needle is skipped
assert(skipOver(s, "foo", "hell", "Hello "));
assert(s == "world");
import std.algorithm.comparison : equal;

auto s1 = "Hello world";
assert(!skipOver(s1, 'a'));
assert(s1 == "Hello world");
assert(skipOver(s1, 'H') && s1 == "ello world");

string[] r = ["abc", "def", "hij"];
dstring e = "abc"d;
assert(!skipOver!((a, b) => a.equal(b))(r, "def"d));
assert(r == ["abc", "def", "hij"]);
assert(skipOver!((a, b) => a.equal(b))(r, e));
assert(r == ["def", "hij"]);

auto s2 = "";
assert(!s2.skipOver('a'));

Partial instantiation

import std.ascii : isWhite;
import std.range.primitives : empty;

alias whitespaceSkiper = skipOver!isWhite;

auto s2 = "\t\tvalue";
auto s3 = "";
auto s4 = "\t\t\t";
assert(whitespaceSkiper(s2) && s2 == "value");
assert(!whitespaceSkiper(s2));
assert(whitespaceSkiper(s4) && s3.empty);

Meta