Function Vector.replace

Replaces the portion of the vector that begins at element pos and spans len characters (or the part of the vector in the slice slice) by new contents.

size_t replace(Val) (
  const size_t pos,
  const size_t len,
  auto ref Val val,
  const size_t count = 1
) scope
if (is(Val : ElementType));

size_t replace(R) (
  const size_t pos,
  const size_t len,
  R range
) scope
if (hasLength!R && isBtlInputRange!R && is(ElementEncodingType!R : ElementType));

size_t replace(Vec) (
  const size_t pos,
  const size_t len,
  auto scope ref Vec vec
) scope
if (isVector!Vec && is(GetElementType!Vec : ElementType));

size_t replace(Val) (
  scope const Vector.ElementType[] slice,
  auto ref Val val,
  const size_t count = 1
) scope
if (is(Val : ElementType));

size_t replace(R) (
  scope const Vector.ElementType[] slice,
  R range
) scope
if (hasLength!R && isBtlInputRange!R && is(ElementEncodingType!R : ElementType));

size_t replace(Vec) (
  scope const Vector.ElementType[] slice,
  auto scope ref Vec vec
) scope
if (isVector!Vec && is(GetElementType!Vec : ElementType));

Parameters

pos position of the first character to be replaced.

len number of elements to replace (if the vector is shorter, as many elements as possible are replaced).

slice sub-slice to be removed, slice must be subset of this

val inserted value.

count number of times val is inserted.

Examples

//pos:
{
    auto vec = Vector!(int, 3).build(1, 2, 3, 4, 5, 6);

    size_t pos = vec.replace(2, 2, 0, 5);
    assert(pos == 2);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6]);

    pos = vec.replace(100, 2, 42, 2);
    assert(pos == 9);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6,  42, 42]);

    pos = vec.replace(2, 100, -1);
    assert(pos == 2);
    assert(vec == [1, 2,  -1]);
}

{
    auto vec = Vector!(int, 3).build(1, 2, 3, 4, 5, 6);

    size_t pos = vec.replace(2, 2, [0, 0, 0, 0, 0]);
    assert(pos == 2);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6]);

    pos = vec.replace(100, 2, [42, 42]);
    assert(pos == 9);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6,  42, 42]);

    pos = vec.replace(2, 100, [-1]);
    assert(pos == 2);
    assert(vec == [1, 2,  -1]);
}

{
    auto vec = Vector!(int, 3).build(1, 2, 3, 4, 5, 6);

    size_t pos = vec.replace(2, 2, Vector!(int, 3).build(0, 0, 0, 0, 0));
    assert(pos == 2);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6]);

    pos = vec.replace(100, 2, Vector!(int, 2).build(42, 42));
    assert(pos == 9);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6,  42, 42]);

    pos = vec.replace(2, 100, Vector!(int, 2).build(-1));
    assert(pos == 2);
    assert(vec == [1, 2,  -1]);
}

//ptr:
{
    auto vec = Vector!(int, 3).build(1, 2, 3, 4, 5, 6);

    size_t pos = vec.replace(vec[2 .. 4], 0, 5);
    assert(pos == 2);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6]);

    pos = vec.replace(vec.ptr[100 .. 102], 42, 2);
    assert(pos == 9);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6,  42, 42]);

    pos = vec.replace(vec.ptr[2 .. 100], -1);
    assert(pos == 2);
    assert(vec == [1, 2,  -1]);
}

{
    auto vec = Vector!(int, 3).build(1, 2, 3, 4, 5, 6);

    size_t pos = vec.replace(vec[2 .. 4], [0, 0, 0, 0, 0]);
    assert(pos == 2);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6]);

    pos = vec.replace(vec.ptr[100 .. 102], [42, 42]);
    assert(pos == 9);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6,  42, 42]);

    pos = vec.replace(vec.ptr[2 .. 100], [-1]);
    assert(pos == 2);
    assert(vec == [1, 2,  -1]);
}

{
    auto vec = Vector!(int, 3).build(1, 2, 3, 4, 5, 6);

    size_t pos = vec.replace(vec[2 .. 4], Vector!(int, 3).build(0, 0, 0, 0, 0));
    assert(pos == 2);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6]);

    pos = vec.replace(vec.ptr[100 .. 102], Vector!(int, 2).build(42, 42));
    assert(pos == 9);
    assert(vec == [1, 2,  0, 0, 0, 0, 0,  5, 6,  42, 42]);

    pos = vec.replace(vec.ptr[2 .. 100], Vector!(int, 2).build(-1));
    assert(pos == 2);
    assert(vec == [1, 2,  -1]);
}