22 #ifndef BM_BM_SIM_RAS_H_
23 #define BM_BM_SIM_RAS_H_
25 #include <bm/config.h>
32 #include <boost/container/flat_set.hpp>
36 class RandAccessUIntSet {
38 using mbr_t = uintptr_t;
39 using container = boost::container::flat_set<mbr_t>;
40 using iterator = container::iterator;
41 using const_iterator = container::const_iterator;
43 RandAccessUIntSet() =
default;
45 RandAccessUIntSet(
const RandAccessUIntSet &other) =
delete;
46 RandAccessUIntSet &operator=(
const RandAccessUIntSet &other) =
delete;
48 RandAccessUIntSet(RandAccessUIntSet &&other) =
default;
49 RandAccessUIntSet &operator=(RandAccessUIntSet &&other) =
default;
53 auto p = members.insert(mbr);
54 return p.second ? 1 : 0;
58 int remove(mbr_t mbr) {
59 auto c = members.erase(mbr);
60 return static_cast<int>(c);
63 bool contains(mbr_t mbr)
const {
64 return members.find(mbr) != members.end();
67 size_t count()
const {
68 return members.size();
72 mbr_t get_nth(
size_t n)
const {
73 auto it = members.nth(n);
78 return members.begin();
81 const_iterator begin()
const {
82 return members.begin();
89 const_iterator end()
const {
99 #endif // BM_BM_SIM_RAS_H_