View source code
Display the source code in std/range/interfaces.d from which this page was generated on
github.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
local clone.
Page wiki
View or edit the community-maintained wiki page associated with this page.
Module std.range.interfaces
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.
|
Wrapper for input ranges. |
|
Wrapper for input ranges with assignable elements. |
|
Wrapper for forward ranges. |
|
Wrapper for forward ranges with assignable elements. |
|
Wrapper for bidirectional ranges. |
|
Wrapper for bidirectional ranges with assignable elements. |
|
Wrapper for finite random-access ranges. |
RandomAccessAssignable |
Wrapper for finite random-access ranges with assignable elements. |
|
Wrapper for infinite random-access ranges. |
|
Wrapper for output ranges. |
|
Class that implements the interface and wraps the
put methods in virtual functions.
|
|
Class that implements the interface and wraps the
input range methods in virtual functions.
|
RefRange |
Wrapper around a forward range that gives it reference semantics. |
Functions
Name | Description |
---|---|
inputRangeObject
|
Convenience function for creating an of the proper type.
See InputRange for an example.
|
Interfaces
Name | Description |
---|---|
BidirectionalAssignable
|
Adds assignable elements to BidirectionalRange .
|
BidirectionalRange
|
Interface for a bidirectional range of type E .
|
ForwardAssignable
|
Adds assignable elements to ForwardRange .
|
ForwardRange
|
Interface for a forward range of type E .
|
InputAssignable
|
Adds assignable elements to InputRange .
|
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.
|
OutputRange
|
Interface for an output range of type E . Usage is similar to the
interface and descendants.
|
RandomAccessFinite
|
Interface for a finite random access range of type E .
|
RandomAccessInfinite
|
Interface for an infinite random access range of type E .
|
RandomFiniteAssignable
|
Adds assignable elements to RandomAccessFinite .
|
Classes
Name | Description |
---|---|
OutputRangeObject
|
Implements the interface for all types E and wraps the
put method for each type E in a virtual function.
|
Templates
Name | Description |
---|---|
InputRangeObject
|
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 interface, aliases itself away.
|
MostDerivedInputRange
|
Returns the interface type that best matches R .
|
outputRangeObject
|
Convenience function for creating an with a base range
of type R that accepts types E .
|
Authors
Andrei Alexandrescu, David Simcha, and Jonathan M Davis. Credit for some of the ideas in building this module goes to Leonardo Maffi.