Jump to: BidirectionalAssignable · BidirectionalRange · ForwardAssignable · ForwardRange · InputAssignable · InputRange · InputRangeObject · inputRangeObject · MostDerivedInputRange · OutputRange · OutputRangeObject · outputRangeObject · RandomAccessFinite · RandomAccessInfinite · RandomFiniteAssignable
InputRange | Обёртка для входных диапазонов. |
InputAssignable | Обёртка для входных диапазонов с присваиваемыми элементами. |
ForwardRange | Обёртка для лидирующих диапазонов. |
ForwardAssignable | Обёртка для лидирующих диапазонов с присваиваемыми элементами. |
BidirectionalRange | Обёртка для двунаправленных диапазонов. |
BidirectionalAssignable | Обёртка для двунаправленных диапазонов с присваиваемыми элементами. |
RandomAccessFinite | Обёртка для конечных диапазонов с произвольным доступом. |
RandomAccessAssignable | Обёртка для конечных диапазонов с произвольным доступом с присваиваемыми элементами. |
RandomAccessInfinite | Обёртка для бесконечных диапазонов с произвольным доступом. |
OutputRange | Обёртка для выходных диапазонов. |
OutputRangeObject | Класс, который реализует интерфейс OutputRange и завёртывает методы put в виртуальные функции. |
InputRangeObject | Класс, который реализует интерфейс InputRange и завёртывает методы входного диапазона в виртуальные функции. |
RefRange | Обёртка вокруг лидирующего диапазона, который придает ему ссылочную семантику. Что-то этот пункт не работает, и в файле модуля его нет... – недоумение переводчика. |
Исходный код: std/range/interfaces.d
Ограничения: Эти интерфейсы не способны пересылать ref-доступ к элементам.
Бесконечность обернутого диапазона не передается Длина не передается в случае диапазонов без произвольного доступа.import std.algorithm.iteration : map; import std.range : iota; void useRange(InputRange!int range) { // Тело функции. } // Создаём диапазонный тип. auto squares = map!"a * a"(iota(10)); // Обёртываем его в интерфейс. auto squaresWrapped = inputRangeObject(squares); // Используем его. useRange(squaresWrapped);
front
();
moveFront
();
popFront
();
empty
();
opApply
(scope int delegate(E));
opApply
(scope int delegate(size_t, E));
opApply
, так как вызов одного делегата на итерации цикла быстрее, чем три вызова виртуальных функций.save
();
save
();
back
();
moveBack
();
popBack
();
save
();
opIndex
(size_t);
moveAt
(size_t);
length
();
opDollar
= length;
opSlice
(size_t, size_t);
moveAt
(size_t);
save
();
opIndex
(size_t);
front
(E newVal
);
save
();
save
();
back
(E newVal
);
Jump to: opIndexAssign · save
RandomFiniteAssignable
(E): RandomAccessFinite!E, BidirectionalAssignable!E;
save
();
opIndexAssign
(E val
, size_t index
);
put
(E);
range
);
MostDerivedInputRange
(R) if (isInputRange!(Unqual!R))InputRangeObject
(R) if (isInputRange!(Unqual!R))inputRangeObject
(R)(R range
)import std.array; auto app = appender!(uint[])(); auto appWrapped = outputRangeObject!(uint, uint[])(app); static assert(is(typeof(appWrapped) : OutputRange!(uint[]))); static assert(is(typeof(appWrapped) : OutputRange!(uint)));
outputRangeObject
(R)(R range
);