SList.insertAfter

size_t insertAfter(Stuff)(Range r, Stuff stuff) if (isInputRange!Stuff || isImplicitlyConvertible!(Stuff, T))

Inserts stuff after range r, which must be a range previously extracted from this container. Given that all ranges for a list end at the end of the list, this function essentially appends to the list and uses r as a potentially fast way to reach the last node in the list. Ideally r is positioned near or at the last element of the list.

stuff can be a value convertible to T or a range of objects convertible to T. The stable version behaves the same, but guarantees that ranges iterating over the container are never invalidated.

Returns

The number of values inserted.

Complexity: k + m, where k is the number of elements in r and m is the length of stuff.

Example: std.algorithm, std.container, std.range;

auto sl = SList!string(["a", "b", "d"]); sl.insertAfter(sl[], "e"); // insert at the end (slowest) assert(equal(sl[], ["a", "b", "d", "e"]));

sl.insertAfter(take(sl[], 2), "c"); // insert after "b" assert(equal(sl[], ["a", "b", "c", "d", "e"])); --------------------

size_t insertAfter(Stuff)(Take!Range r, Stuff stuff) if (isInputRange!Stuff || isImplicitlyConvertible!(Stuff, T))

Similar to insertAfter above, but accepts a range bounded in count. This is important for ensuring fast insertions in the middle of the list. For fast insertions after a specified position r, use

insertAfter(take(r, 1), stuff). The complexity of that operation

only depends on the number of elements in stuff.

Precondition: r.original.empty || r.maxLength > 0

Returns

The number of values inserted.

Complexity: k + m, where k is the number of elements in r and m is the length of stuff.