xxxxxxxxxx
import std.stdio;
import std.range;
auto without(R, I)(R r, I i) if (isInputRange!R && isInputRange!I && is(ElementType!I : size_t))
{
static struct Result
{
R src;
I indicies;
size_t idx;
auto ref front() { return src.front; }
void skipIdx()
{
while(!indicies.empty && indicies.front == idx)
{
++idx; src.popFront; indicies.popFront;
}
}
void popFront()
{
++idx;
src.popFront;
skipIdx;
}
bool empty() { return src.empty; }
}
auto ret = Result(r, i);
ret.skipIdx;
return ret;
}
void main(string[] args)
{
long[] aa = [1, 2, 3, 4];
writeln(aa.without([1, 3]));
}