Implements the OutputRange interface for all types E and wraps the put method for each type E in a virtual function.
Thrown when an interface method is not supported by the wrapped range
Convenience function for creating an InputRangeObject of the proper type. See InputRange for an example.
Adds assignable elements to BidirectionalRange.
Interface for a bidirectional range of type E.
Adds assignable elements to ForwardRange.
Interface for a forward range of type E.
Adds assignable elements to 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 for an output range of type E. Usage is similar to the * InputRange interface and descendants.
Interface for a finite random access range of type E.
Interface for an infinite random access range of type E.
Adds assignable elements to RandomAccessFinite.
Implements the most derived interface that R works with and wraps all relevant range primitives in virtual functions. If R is already derived from the InputRange interface, aliases itself away.
Returns the interface type that best matches R.
Convenience function for creating an OutputRangeObject with a base range * of type R that accepts types E.
This module is a submodule of std.range.
The main std.range module provides template-based tools for working with ranges, but sometimes an object-based interface for ranges is needed, such as when runtime polymorphism is required. For this purpose, this submodule provides a number of object and interface definitions that can be used to wrap around range objects created by the std.range templates.