13#ifndef IOX2_RESIZABLE_MEMORY_PUBLISH_SUBSCRIBE_HPP
14#define IOX2_RESIZABLE_MEMORY_PUBLISH_SUBSCRIBE_HPP
16#include "iox2/iceoryx2_cxx_deployment.hpp"
18#if IOX2_FEATURE_FLATBUFFERS
20#include <flatbuffers/allocator.h>
26template <ServiceType,
typename,
typename>
31template <ServiceType Service>
32class ResizableMemoryPublishSubscribe :
public flatbuffers::Allocator {
34 ResizableMemoryPublishSubscribe(
const ResizableMemoryPublishSubscribe&) =
delete;
35 ResizableMemoryPublishSubscribe(ResizableMemoryPublishSubscribe&&) noexcept;
36 ~ResizableMemoryPublishSubscribe() override;
38 auto operator=(const ResizableMemoryPublishSubscribe&) noexcept -> ResizableMemoryPublishSubscribe& = delete;
39 auto operator=(ResizableMemoryPublishSubscribe&&) noexcept -> ResizableMemoryPublishSubscribe&;
41 auto allocate(
size_t size) -> uint8_t* override;
43 void deallocate(uint8_t* ptr,
size_t size) override;
45 auto reallocate_downward(uint8_t* old_p,
size_t old_size,
size_t new_size,
size_t in_use_back,
size_t in_use_front)
48 auto len() const ->
size_t;
49 auto reserved_header_len() const ->
size_t;
50 auto as_ptr() const -> const uint8_t*;
53 template <ServiceType, typename, typename>
54 friend class
iox2::Publisher;
56 explicit ResizableMemoryPublishSubscribe(iox2_resizable_memory_publish_subscribe_h handle);
59 iox2_resizable_memory_publish_subscribe_h m_handle =
nullptr;
60 bool m_has_allocated = false;
61 uint8_t* m_ptr =
nullptr;