82 std::vector<PtrAndBytes> free_blocks;
83 for (std::size_t freelist_idx = 0; freelist_idx < resource.
m_free_lists.size(); ++freelist_idx) {
86 while (ptr !=
nullptr) {
87 free_blocks.emplace_back(ptr, bytes);
88 const auto* ptr_ = ptr;
96 if (num_available_bytes > 0) {
101 std::vector<PtrAndBytes> chunks;
108 std::sort(free_blocks.begin(), free_blocks.end());
109 std::sort(chunks.begin(), chunks.end());
111 auto chunk_it = chunks.begin();
112 auto chunk_ptr_remaining = chunk_it->ptr;
113 auto chunk_size_remaining = chunk_it->size;
114 for (
const auto& free_block : free_blocks) {
115 if (chunk_size_remaining == 0) {
116 assert(chunk_it != chunks.end());
118 assert(chunk_it != chunks.end());
119 chunk_ptr_remaining = chunk_it->ptr;
120 chunk_size_remaining = chunk_it->size;
122 assert(free_block.ptr == chunk_ptr_remaining);
123 assert(free_block.size <= chunk_size_remaining);
125 chunk_ptr_remaining += free_block.size;
126 chunk_size_remaining -= free_block.size;
129 assert(chunk_ptr_remaining == chunk_it->ptr + chunk_it->size);
131 assert(chunk_it == chunks.end());
132 assert(chunk_size_remaining == 0);