40 : _active_group(nullptr), _active_elements(), _free_blobs(), _occupied_blobs(), _finalized_groups()
46 if (_active_group ==
nullptr)
49 _active_group = group;
59 const bool status = bool(_finalized_groups.erase(group));
71 "Memory object is already registered!");
74 if (_free_blobs.empty())
76 _occupied_blobs.emplace_front(Blob{obj, 0, 0, {obj}});
80 _occupied_blobs.splice(std::begin(_occupied_blobs), _free_blobs, std::begin(_free_blobs));
81 _occupied_blobs.front().id = obj;
85 _active_elements.insert(std::make_pair(obj, obj));
93 auto active_object_it = _active_elements.find(obj);
97 Element &el = active_object_it->second;
98 el.handle = &obj_memory;
100 el.alignment = alignment;
104 auto occupied_blob_it = std::find_if(std::begin(_occupied_blobs),
std::end(_occupied_blobs),
105 [&obj](
const Blob &
b) {
return obj ==
b.id; });
109 occupied_blob_it->bound_elements.insert(obj);
110 occupied_blob_it->max_size = std::max(occupied_blob_it->max_size, size);
111 occupied_blob_it->max_alignment = std::max(occupied_blob_it->max_alignment, alignment);
112 occupied_blob_it->id =
nullptr;
113 _free_blobs.splice(std::begin(_free_blobs), _occupied_blobs, occupied_blob_it);
121 update_blobs_and_mappings();
124 _finalized_groups[_active_group].insert(std::begin(_active_elements),
std::end(_active_elements));
127 _active_elements.clear();
128 _active_group =
nullptr;
135 return !std::any_of(std::begin(_active_elements),
std::end(_active_elements),
136 [](
const std::pair<void *, Element> &e) {
return !e.second.status; });