1 module imports.ice15200b; 2 filter(alias pred)3template filter(alias pred) 4 { 5 auto filter(R)(R range) 6 { 7 return FilterResult!(pred, R)(range); 8 } 9 } 10 FilterResult(alias pred,R)11struct FilterResult(alias pred, R) 12 { 13 R _input; 14 15 this(R r) 16 { 17 _input = r; 18 while (_input.length && !pred(_input[0])) 19 { 20 _input = _input[1..$]; 21 } 22 } 23 24 @property bool empty() 25 { 26 return _input.length == 0; 27 } 28 29 @property auto ref front() 30 { 31 return _input[0]; 32 } 33 34 void popFront() 35 { 36 do 37 { 38 _input = _input[1..$]; 39 } while (_input.length && !pred(_input[0])); 40 } 41 } 42