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.
interface InputRange(E)
;
Properties
Name | Type | Description |
---|---|---|
empty [get]
|
bool | |
front [get]
|
E |
Methods
Name | Description |
---|---|
moveFront
()
|
Calls moveFront on the wrapped range, if
possible. Otherwise, throws an UnsupportedRangeMethod exception.
|
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 .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);
Authors
Andrei Alexandrescu, David Simcha, and Jonathan M Davis. Credit for some of the ideas in building this module goes to Leonardo Maffi.