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.