20#ifndef RIPPLE_BASICS_CANPROCESS_H_INCLUDED
21#define RIPPLE_BASICS_CANPROCESS_H_INCLUDED
69 template <
class Mutex,
class Collection,
class Item>
70 CanProcess(Mutex& mtx, Collection& collection, Item
const& item)
88 template <
bool useIterator,
class Mutex,
class Collection,
class Item>
90 doInsert(Mutex& mtx, Collection& collection, Item
const& item)
96 auto const insertResult = collection.insert(item);
97 auto const it = insertResult.first;
98 if (!insertResult.second)
100 if constexpr (useIterator)
103 collection.erase(it);
108 collection.erase(item);
114 template <
class Mutex,
class Collection,
class Item>
116 insert(Mutex& mtx, Collection& collection, Item
const& item)
118 return doInsert<false>(mtx, collection, item);
123 template <
class Mutex,
class Item>
127 return doInsert<true>(mtx, collection, item);
RAII class to check if an Item is already being processed on another thread, as indicated by it's pre...
CanProcess(Mutex &mtx, Collection &collection, Item const &item)
std::function< void()> insert(Mutex &mtx, std::set< Item > &collection, Item const &item)
std::function< void()> cleanup_
std::function< void()> insert(Mutex &mtx, Collection &collection, Item const &item)
std::function< void()> doInsert(Mutex &mtx, Collection &collection, Item const &item)