Commit 84617bbb authored by Anton Bukov's avatar Anton Bukov

Made skipWhile_i more lazy

parent 23f54ad6
...@@ -190,22 +190,21 @@ namespace boolinq ...@@ -190,22 +190,21 @@ namespace boolinq
return where_i([=](T, int i){return i >= count;}); return where_i([=](T, int i){return i >= count;});
} }
LinqObj<TE> skipWhile_i(std::function<bool(T,int)> predicate) const LinqObj<Enumerator<T,std::pair<TE,int> > > skipWhile_i(std::function<bool(T,int)> predicate) const
{ {
auto enumerator = _enumerator; return Enumerator<T,std::pair<TE,int> >([=](std::pair<TE,int> & pair)->T{
if (pair.second != 0)
try return pair.first.nextObject();
{
int i = 0; T object;
while(predicate(TE(enumerator).nextObject(),i++)) do
enumerator.nextObject(); object = pair.first.nextObject();
} while (predicate(object,pair.second++));
catch(EnumeratorEndException &){} return object;
}, std::make_pair(_enumerator,0));
return enumerator;
} }
LinqObj<TE> skipWhile(std::function<bool(T)> predicate) const LinqObj<Enumerator<T,std::pair<TE,int> > > skipWhile(std::function<bool(T)> predicate) const
{ {
return skipWhile_i([=](T t, int /*i*/){ return predicate(t);}); return skipWhile_i([=](T t, int /*i*/){ return predicate(t);});
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment