29template<
typename DataT>
81 std::vector<std::shared_ptr<Chunk>>
chunks_;
93template<
typename DataT>
99template<
typename DataT>
100inline std::pair<DataT *, typename GridBlockAllocator<DataT>::Deleter>
103 std::unique_lock lock(*
mutex_);
108 std::shared_ptr<Chunk> chunk =
chunks_.back();
109 DataT * ptr =
reinterpret_cast<DataT *
>(chunk->data.data());
110 chunk->mask.setOff(0);
117 std::shared_ptr<Chunk> & chunk = (*it);
118 auto mask_index = chunk->mask.findFirstOn();
119 if (mask_index < chunk->mask.size()) {
122 DataT * ptr =
reinterpret_cast<DataT *
>(&chunk->data[data_index]);
123 chunk->mask.setOff(mask_index);
128 throw std::logic_error(
"Unexpected end of GridBlockAllocator::allocateBlock");
131template<
typename DataT>
134 std::unique_lock lock(*
mutex_);
135 int to_be_erased_count = 0;
136 auto remove_if = std::remove_if(
chunks_.begin(),
chunks_.end(), [&](
const auto & chunk) ->
bool {
137 bool notUsed = chunk->mask.isOn();
138 to_be_erased_count += (notUsed) ? 1 : 0;
145template<
typename DataT>
151template<
typename DataT>
154 auto chunk = std::make_shared<Chunk>();
160template<
typename DataT>
162 std::shared_ptr<Chunk> chunk, uint32_t index)
164 return [
this, index, chunk] {
166 std::unique_lock lock(*
mutex_);
167 chunk->mask.setOn(index);
size_t memUsage() const
Definition grid_allocator.hpp:146
std::function< void()> Deleter
Definition grid_allocator.hpp:41
size_t size() const
Definition grid_allocator.hpp:59
void addNewChunk()
Definition grid_allocator.hpp:152
GridBlockAllocator(GridBlockAllocator &&)=default
std::pair< DataT *, Deleter > allocateBlock()
Definition grid_allocator.hpp:101
size_t log2dim_
Definition grid_allocator.hpp:70
size_t size_
Definition grid_allocator.hpp:73
size_t capacity() const
Definition grid_allocator.hpp:54
std::unique_ptr< std::mutex > mutex_
Definition grid_allocator.hpp:82
size_t capacity_
Definition grid_allocator.hpp:72
size_t block_bytes_
Definition grid_allocator.hpp:71
void clear()
Definition grid_allocator.hpp:45
Deleter createDeleter(std::shared_ptr< Chunk > chunk, uint32_t index)
Definition grid_allocator.hpp:161
GridBlockAllocator & operator=(const GridBlockAllocator &other)=delete
GridBlockAllocator(size_t log2dim)
Definition grid_allocator.hpp:94
void releaseUnusedMemory()
Definition grid_allocator.hpp:132
std::vector< std::shared_ptr< Chunk > > chunks_
Definition grid_allocator.hpp:81
GridBlockAllocator & operator=(GridBlockAllocator &&other)=default
GridBlockAllocator(const GridBlockAllocator &)=delete
static constexpr size_t blocks_per_chunk
Definition grid_allocator.hpp:67
Definition grid_coord.hpp:226
Definition grid_allocator.hpp:75
Mask mask
Definition grid_allocator.hpp:78
std::vector< char > data
Definition grid_allocator.hpp:79
Chunk()
Definition grid_allocator.hpp:76