module imports.ice15200b; | |
template filter(alias pred) | |
{ | |
auto filter(R)(R range) | |
{ | |
return FilterResult!(pred, R)(range); | |
} | |
} | |
struct FilterResult(alias pred, R) | |
{ | |
R _input; | |
this(R r) | |
{ | |
_input = r; | |
while (_input.length && !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 && !pred(_input[0])); | |
} | |
} |