module imports.std15030algo; | |
template filter(alias pred) | |
{ | |
auto filter(R)(R r) | |
{ | |
return FilterResult!(pred, R)(r); | |
} | |
} | |
private struct FilterResult(alias pred, R) | |
{ | |
R _input; | |
this(R r) | |
{ | |
_input = r; | |
while (_input.length != 0 && !pred(_input[0])) | |
{ | |
_input = _input[1..$]; | |
} | |
} | |
@property bool empty() { return _input.length == 0; } | |
@property auto ref front() { return _input[0]; } | |
void popFront() | |
{ | |
do | |
{ | |
_input = _input[1..$]; | |
} while (_input.length != 0 && !pred(_input[0])); | |
} | |
} |