42 lines
683 B
C++
42 lines
683 B
C++
|
|
#pragma once
|
|
|
|
#include <memory>
|
|
#include "utils/option.hpp"
|
|
|
|
namespace iter
|
|
{
|
|
template <class I, class C>
|
|
void for_all(I &&iter, C &&consumer)
|
|
{
|
|
auto e = iter.next();
|
|
while (e.is_present()) {
|
|
consumer(e.take());
|
|
e = iter.next();
|
|
}
|
|
}
|
|
|
|
template <class I, class C>
|
|
void for_all(std::unique_ptr<I> &&iter, C &&consumer)
|
|
{
|
|
auto e = iter->next();
|
|
while (e.is_present()) {
|
|
consumer(e.take());
|
|
e = iter->next();
|
|
}
|
|
}
|
|
|
|
template <class I, class C>
|
|
void find(I iter, C &&consumer)
|
|
{
|
|
auto e = iter.next();
|
|
while (e.is_present()) {
|
|
|
|
if (consumer(e.take())) {
|
|
return;
|
|
}
|
|
e = iter.next();
|
|
}
|
|
}
|
|
}
|