Navigating tradeoffs in bidirectional filter design
monkyyy
crazymonkyyy at gmail.com
Thu Jan 9 21:56:59 UTC 2025
a unidirectional range filter can be implimented as simply as:
```d
auto find(alias F,R)(R r){
while( ! r.empty && ! F(r.front)){
r.popFront;
}
return r;
}
unittest{
counter(5).find!(a=>a==3).summery;
}
auto findnext(alias F,R)(R r){
r.popFront;
return r.find!F;
}
auto filter(alias F,R)(R r){
struct Filter{
R r;
auto ref front()=>r.front;
void popFront(){r=r.findnext!F;}
bool empty()=>r.empty;
}
return Filter(r.find!F);
}
unittest{
counter(10).filter!(a=>a%3).summery;//[1, 2, 4, 5, 7, 8]
}
```
Im aware phoboes takes ....more complexity to implement filter
and there should be *some* extra complexity to make a
bidirectional filter, but when I ussally look into phoboes 1000
line functions I usually make different tradeoffs. What are the
actual considerations here?
More information about the Digitalmars-d-learn
mailing list