Anticipate Lane Changes
This commit is contained in:
committed by
Moritz Kobitzsch
parent
efa29edf09
commit
ec0a1a4ab1
@@ -0,0 +1,40 @@
|
||||
#ifndef OSRM_GROUP_BY
|
||||
#define OSRM_GROUP_BY
|
||||
|
||||
#include <algorithm>
|
||||
#include <utility>
|
||||
|
||||
namespace osrm
|
||||
{
|
||||
namespace util
|
||||
{
|
||||
|
||||
// Runs fn on consecutive items in sub-ranges determined by pred.
|
||||
//
|
||||
// Example:
|
||||
// vector<int> v{1,2,2,2,3,4,4};
|
||||
// group_by(first, last, even, print);
|
||||
// >>> 2,2,2
|
||||
// >>> 4,4
|
||||
//
|
||||
// Note: this mimics Python's itertools.groupby
|
||||
template <typename Iter, typename Pred, typename Fn>
|
||||
Fn group_by(Iter first, Iter last, Pred pred, Fn fn)
|
||||
{
|
||||
while (first != last)
|
||||
{
|
||||
first = std::find_if(first, last, pred);
|
||||
auto next = std::find_if_not(first, last, pred);
|
||||
|
||||
(void)fn(std::make_pair(first, next));
|
||||
|
||||
first = next;
|
||||
}
|
||||
|
||||
return fn;
|
||||
}
|
||||
|
||||
} // ns util
|
||||
} // ns osrm
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user