1#ifndef included_AMP_AtomicList
2#define included_AMP_AtomicList
18template<
class TYPE,
class COMPARE = std::less<TYPE>>
24 const TYPE &default_value = TYPE(),
25 const COMPARE &comp = COMPARE() );
42 template<
typename Compare,
class... Args>
43 inline TYPE
remove( Compare compare,
const Args &...args );
59 inline size_t size()
const {
return d_N.load(); }
65 inline bool empty()
const {
return d_N.load() == 0; }
114 volatile std::atomic_int32_t
d_N;
127 tmp =
d_next[i].fetch_and( 0 );
128 }
while ( tmp == 0 );
134 d_next[i].fetch_or( value );
165#include "AMP/utils/threadpool/AtomicList.hpp"
Maintain a sorted list of entries.
size_t size() const
Return the size of the list.
volatile std::atomic_int64_t d_N_insert
TYPE remove(Compare compare, const Args &...args)
Remove an item from the list.
size_t N_insert() const
Return the total number of inserts since object creation.
TYPE remove_first()
Remove the first from the list.
AtomicList(const AtomicList &)=delete
volatile std::atomic_int32_t d_unused
void insert(const TYPE &x)
Insert an item.
constexpr size_t available() const
Return the available space.
void clear()
Clear the list.
volatile std::atomic_int32_t * d_next
size_t N_remove() const
Return the total number of removals since object creation.
volatile std::atomic_int32_t d_N
AtomicList(size_t capacity=1024, const TYPE &default_value=TYPE(), const COMPARE &comp=COMPARE())
Default constructor.
volatile TYPE * d_objects
volatile std::atomic_int64_t d_N_remove
bool check()
Check the list.
AtomicList & operator=(const AtomicList &)=delete
constexpr size_t capacity() const
Return the capacity of the list.
void unlock(int i, int value)
bool empty() const
Check if the list is empty.