IPPL (Independent Parallel Particle Layer)
IPPL
Loading...
Searching...
No Matches
BufferHandler.h
Go to the documentation of this file.
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>;
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:
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);
152 typename buffer_set_type::iterator findSmallestSufficientBuffer(size_type requiredSize);
156
159
160 protected:
165 };
166} // namespace ippl
167
169
170#endif
Definition Archive.h:20
std::size_t size_type
Definition IpplTypes.h:13
Interface for memory buffer handling.
virtual size_type getFreeSize() const =0
Gets the size of all free buffers.
ippl::detail::size_type size_type
ippl::detail::Archive< MemorySpace > archive_type
std::shared_ptr< archive_type > buffer_type
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.
void releaseUsedBuffer(buffer_type buffer)
buffer_type reallocateLargestFreeBuffer(size_type requiredSize)
size_type freeSize_m
Total size of all free buffers.
size_type usedSize_m
Total size of all allocated buffers.
buffer_type getFreeBuffer(buffer_type buffer)
size_type getUsedSize() const override
Frees a specified buffer.
buffer_set_type used_buffers
Set of used buffers.
void deleteAllBuffers() override
Frees a specified buffer.
bool(*)(const buffer_type &, const buffer_type &) buffer_comparator_type
std::set< buffer_type, buffer_comparator_type > buffer_set_type
bool isBufferUsed(buffer_type buffer) const
static bool bufferSizeComparator(const buffer_type &lhs, const buffer_type &rhs)
buffer_type findFreeBuffer(size_type requiredSize)
void freeBuffer(buffer_type buffer) override
Frees a specified buffer.
buffer_type getBuffer(size_type size, double overallocation) override
Acquires a buffer of at least the specified size.
buffer_type allocateNewBuffer(size_type requiredSize)
void freeAllBuffers() override
Frees a specified buffer.
buffer_set_type::iterator findSmallestSufficientBuffer(size_type requiredSize)
buffer_set_type free_buffers
Set of free buffers.
size_type getFreeSize() const override
Frees a specified buffer.