IPPL API Reference
Independent Parallel Particle Layer C++ API
Loading...
Searching...
No Matches
BufferHandler.h
1#ifndef IPPL_BUFFER_HANDLER_H
2#define IPPL_BUFFER_HANDLER_H
3
4#include <memory>
5#include <set>
6
8
9namespace ippl {
10
20 template <typename MemorySpace>
22 public:
24 using buffer_type = std::shared_ptr<archive_type>;
25 using size_type = ippl::detail::size_type;
26
27 virtual ~BufferHandler() {}
28
41 virtual buffer_type getBuffer(size_type size, double overallocation) = 0;
42
51 virtual void freeBuffer(buffer_type buffer) = 0;
52
59 virtual void freeAllBuffers() = 0;
60
67 virtual void deleteAllBuffers() = 0;
68
74 virtual size_type getUsedSize() const = 0;
75
81 virtual size_type getFreeSize() const = 0;
82 };
83
94 template <typename MemorySpace>
95 class DefaultBufferHandler : public BufferHandler<MemorySpace> {
96 public:
98 using typename BufferHandler<MemorySpace>::buffer_type;
99 using typename BufferHandler<MemorySpace>::size_type;
100
101 ~DefaultBufferHandler() override;
102
116 buffer_type getBuffer(size_type size, double overallocation) override;
117
121 void freeBuffer(buffer_type buffer) override;
122
126 void freeAllBuffers() override;
127
131 void deleteAllBuffers() override;
132
136 size_type getUsedSize() const override;
137
141 size_type getFreeSize() const override;
142
143 private:
144 using buffer_comparator_type = bool (*)(const buffer_type&, const buffer_type&);
145 using buffer_set_type = std::set<buffer_type, buffer_comparator_type>;
146
147 static bool bufferSizeComparator(const buffer_type& lhs, const buffer_type& rhs);
148
149 bool isBufferUsed(buffer_type buffer) const;
150 void releaseUsedBuffer(buffer_type buffer);
151 buffer_type findFreeBuffer(size_type requiredSize);
152 typename buffer_set_type::iterator findSmallestSufficientBuffer(size_type requiredSize);
153 buffer_type getFreeBuffer(buffer_type buffer);
154 buffer_type reallocateLargestFreeBuffer(size_type requiredSize);
155 buffer_type allocateNewBuffer(size_type requiredSize);
156
157 size_type usedSize_m;
158 size_type freeSize_m;
159
160 protected:
161 buffer_set_type used_buffers{
162 &DefaultBufferHandler::bufferSizeComparator};
163 buffer_set_type free_buffers{
164 &DefaultBufferHandler::bufferSizeComparator};
165 };
166} // namespace ippl
167
168#include "Communicate/BufferHandler.hpp"
169
170#endif
Interface for memory buffer handling.
Definition BufferHandler.h:21
virtual size_type getFreeSize() const =0
Gets the size of all free buffers.
virtual void deleteAllBuffers()=0
Deletes all buffers.
virtual void freeAllBuffers()=0
Frees all currently used buffers.
virtual void freeBuffer(buffer_type buffer)=0
Frees a specified buffer.
virtual buffer_type getBuffer(size_type size, double overallocation)=0
Requests a memory buffer of a specified size.
virtual size_type getUsedSize() const =0
Gets the size of all buffers in use.
Concrete implementation of BufferHandler for managing memory buffers.
Definition BufferHandler.h:95
size_type getUsedSize() const override
Gets the size of all buffers in use.
Definition BufferHandler.hpp:53
buffer_set_type used_buffers
Set of used buffers.
Definition BufferHandler.h:161
void deleteAllBuffers() override
Deletes all buffers.
Definition BufferHandler.hpp:43
void freeBuffer(buffer_type buffer) override
Frees a specified buffer.
Definition BufferHandler.hpp:27
buffer_type getBuffer(size_type size, double overallocation) override
Acquires a buffer of at least the specified size.
Definition BufferHandler.hpp:11
void freeAllBuffers() override
Frees all currently used buffers.
Definition BufferHandler.hpp:34
buffer_set_type free_buffers
Set of free buffers.
Definition BufferHandler.h:163
size_type getFreeSize() const override
Gets the size of all free buffers.
Definition BufferHandler.hpp:59
Definition Archive.h:29
Definition Archive.h:20