47class ResizeableLockFreeQueue :
protected LockFreeQueue<ElementType, MaxCapacity>
53 using element_t = ElementType;
54 static constexpr uint64_t MAX_CAPACITY = MaxCapacity;
56 ResizeableLockFreeQueue()
noexcept =
default;
57 ~ResizeableLockFreeQueue()
noexcept =
default;
61 ResizeableLockFreeQueue(
const ResizeableLockFreeQueue&) =
delete;
62 ResizeableLockFreeQueue(ResizeableLockFreeQueue&&) =
delete;
63 ResizeableLockFreeQueue& operator=(
const ResizeableLockFreeQueue&) =
delete;
64 ResizeableLockFreeQueue& operator=(ResizeableLockFreeQueue&&) =
delete;
66 ResizeableLockFreeQueue(
const uint64_t initialCapacity)
noexcept;
87 iox::cxx::optional<ElementType>
push(const ElementType& value) noexcept;
94 iox::cxx::optional<ElementType>
push(ElementType&& value) noexcept;
114 template <typename Function,
115 typename = typename std::enable_if<cxx::is_invocable<Function, ElementType>::value>::type>
116 bool setCapacity(const uint64_t newCapacity, Function&& removeHandler) noexcept;
126 using BufferIndex = typename Base::BufferIndex;
127 std::atomic<uint64_t> m_capacity{MaxCapacity};
129 std::atomic_flag m_resizeInProgress = ATOMIC_FLAG_INIT;
137 uint64_t increaseCapacity(
const uint64_t toIncrease)
noexcept;
146 template <
typename Function>
147 uint64_t decreaseCapacity(
const uint64_t toDecrease, Function&& removeHandler)
noexcept;
152 bool tryGetUsedIndex(BufferIndex& index)
noexcept;
154 template <
typename T>