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));
73 if(_free_blobs.empty())
75 _occupied_blobs.emplace_front(Blob{ obj, 0, 0, { obj } });
79 _occupied_blobs.splice(std::begin(_occupied_blobs), _free_blobs, std::begin(_free_blobs));
80 _occupied_blobs.front().id = obj;
84 _active_elements.insert(std::make_pair(obj, obj));
92 auto active_object_it = _active_elements.find(obj);
96 Element &el = active_object_it->second;
97 el.handle = &obj_memory;
99 el.alignment = alignment;
103 auto occupied_blob_it = std::find_if(std::begin(_occupied_blobs),
std::end(_occupied_blobs), [&obj](
const Blob &
b)
110 occupied_blob_it->bound_elements.insert(obj);
111 occupied_blob_it->max_size = std::max(occupied_blob_it->max_size, size);
112 occupied_blob_it->max_alignment = std::max(occupied_blob_it->max_alignment, alignment);
113 occupied_blob_it->id =
nullptr;
114 _free_blobs.splice(std::begin(_free_blobs), _occupied_blobs, occupied_blob_it);
122 update_blobs_and_mappings();
125 _finalized_groups[_active_group].insert(std::begin(_active_elements),
std::end(_active_elements));
128 _active_elements.clear();
129 _active_group =
nullptr;
136 return !std::any_of(std::begin(_active_elements),
std::end(_active_elements), [](
const std::pair<void *, Element> &e)
138 return !e.second.status;
void register_group(IMemoryGroup *group) override
Registers a group to the lifetime manager and assigns a group id.
bool are_all_finalized() const override
Checks if the lifetime of the registered object is complete.
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
Copyright (c) 2017-2021 Arm Limited.
bool release_group(IMemoryGroup *group) override
Unbound and release elements associated with a group.
#define ARM_COMPUTE_ERROR_ON_MSG(cond, msg)
virtual MemoryMappings & mappings()=0
Gets the memory mapping of the group.
void end(TokenStream &in, bool &valid)
ISimpleLifetimeManager()
Constructor.
void start_lifetime(void *obj) override
Registers and starts lifetime of an object.
void end_lifetime(void *obj, IMemory &obj_memory, size_t size, size_t alignment) override
Ends lifetime of an object.