InputRange

These interfaces are intended to provide virtual function-based wrappers around input ranges with element type E. This is useful where a well-defined binary interface is required, such as when a DLL function or virtual function needs to accept a generic range as a parameter. Note that isInputRange and friends check for conformance to structural interfaces not for implementation of these interface types.

Limitations:

These interfaces are not capable of forwarding ref access to elements.

Infiniteness of the wrapped range is not propagated.

Length is not propagated in the case of non-random access ranges.

Members

Functions

moveFront
E moveFront()

Calls std.range.primitives.moveFront on the wrapped range, if possible. Otherwise, throws an UnsupportedRangeMethod exception.

opApply
int opApply(int delegate(size_t, E) )

foreach iteration uses opApply, since one delegate call per loop iteration is faster than three virtual function calls.

opApply
int opApply(int delegate(E) )

foreach iteration uses opApply, since one delegate call per loop iteration is faster than three virtual function calls.

popFront
void popFront()

Properties

empty
bool empty [@property getter]
front
E front [@property getter]

Examples

import std.algorithm.iteration : map;
import std.range : iota;

void useRange(InputRange!int range) {
    // Function body.
}

// Create a range type.
auto squares = map!"a * a"(iota(10));

// Wrap it in an interface.
auto squaresWrapped = inputRangeObject(squares);

// Use it.
useRange(squaresWrapped);

See Also

Meta