Interface std.range.interfaces.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.
Properties
| Name | Type | Description |
|---|---|---|
empty
[get]
|
bool |
|
front
[get]
|
E |
Methods
| Name | Description |
|---|---|
moveFront
|
|
opApply
|
foreach iteration uses opApply, since one delegate call per loop
iteration is faster than three virtual function calls.
|
popFront
|
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.
See Also
Example
import std.algorithm : 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);
Authors
Andrei Alexandrescu, David Simcha, and Jonathan M Davis. Credit for some of the ideas in building this module goes to Leonardo Maffi.