fxos/include/fxos/util/Queue.h

61 lines
1.5 KiB
C++

//---------------------------------------------------------------------------//
// 1100101 |_ mov #0, r4 __ //
// 11 |_ <0xb380 %5c4> / _|_ _____ ___ //
// 0110 |_ 3.50 -> 3.60 | _\ \ / _ (_-< //
// |_ base# + offset |_| /_\_\___/__/ //
//---------------------------------------------------------------------------//
// fxos/util/Queue: Simple queue that handles recursivity
//---
#ifndef FXOS_UTIL_QUEUE_H
#define FXOS_UTIL_QUEUE_H
#include <queue>
#include <set>
template<typename T>
struct Queue
{
Queue(): pending {}, seen {}
{
}
bool empty() const
{
return pending.empty();
}
T &pop()
{
T &object = pending.front();
pending.pop();
return object;
}
void clear()
{
pending.clear();
seen.clear();
}
/* Enqueue an object to visit later (if not already visited) */
void enqueue(T object)
{
if(!seen.count(object)) {
pending.push(object);
seen.insert(object);
}
}
/* Enqueue an object even for later update, regardless of loops */
void update(T object)
{
pending.push(object);
seen.insert(object);
}
/* Queue of objects to visit next */
std::queue<T> pending;
/* Objects already visited or currently pending */
std::set<T> seen;
};
#endif /* FXOS_UTIL_QUEUE_H */