Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
pulp::signal::MirroredHistoryBuffer< SampleType > Class Template Reference

A single-thread circular history whose complete oldest-to-newest window is always physically contiguous. More...

#include <mirrored_history_buffer.hpp>

Public Member Functions

 MirroredHistoryBuffer ()=default
 MirroredHistoryBuffer (const MirroredHistoryBuffer &)=default
MirroredHistoryBuffer & operator= (const MirroredHistoryBuffer &)=default
 MirroredHistoryBuffer (MirroredHistoryBuffer &&other) noexcept
MirroredHistoryBuffer & operator= (MirroredHistoryBuffer &&other) noexcept
bool prepare (std::size_t capacity)
 Allocates control-thread storage transactionally.
void reset () noexcept
void push (SampleType sample) noexcept
std::span< const SampleType > window () const noexcept
 The view remains memory-valid until prepare(), but consume it before the next push() or reset() because those calls change its contents and may change which physical span represents the ordered history.
std::size_t capacity () const noexcept
bool empty () const noexcept

Detailed Description

template<detail::MirroredHistorySample SampleType>
class pulp::signal::MirroredHistoryBuffer< SampleType >

A single-thread circular history whose complete oldest-to-newest window is always physically contiguous.

prepare() allocates two copies of the requested capacity. Each push() writes the new sample into both mirrors and advances one bounded cursor, so its cost does not depend on wrap position. window() then returns the last capacity() samples ordered oldest to newest without a copy or modulo walk. Unfilled positions and positions restored by reset() contain zeroes.

This is DSP-local history, not a queue and not a synchronization primitive. It is not safe for concurrent producer/consumer access. After prepare(), push(), window(), reset(), and the accessors allocate no memory.

Constructor & Destructor Documentation

◆ MirroredHistoryBuffer() [1/3]

template<detail::MirroredHistorySample SampleType>
pulp::signal::MirroredHistoryBuffer< SampleType >::MirroredHistoryBuffer ( )
default

◆ MirroredHistoryBuffer() [2/3]

template<detail::MirroredHistorySample SampleType>
pulp::signal::MirroredHistoryBuffer< SampleType >::MirroredHistoryBuffer ( const MirroredHistoryBuffer< SampleType > & )
default

◆ MirroredHistoryBuffer() [3/3]

template<detail::MirroredHistorySample SampleType>
pulp::signal::MirroredHistoryBuffer< SampleType >::MirroredHistoryBuffer ( MirroredHistoryBuffer< SampleType > && other)
inlinenoexcept

Member Function Documentation

◆ capacity()

template<detail::MirroredHistorySample SampleType>
std::size_t pulp::signal::MirroredHistoryBuffer< SampleType >::capacity ( ) const
inlinenoexcept

◆ empty()

template<detail::MirroredHistorySample SampleType>
bool pulp::signal::MirroredHistoryBuffer< SampleType >::empty ( ) const
inlinenoexcept

◆ operator=() [1/2]

template<detail::MirroredHistorySample SampleType>
MirroredHistoryBuffer & pulp::signal::MirroredHistoryBuffer< SampleType >::operator= ( const MirroredHistoryBuffer< SampleType > & )
default

◆ operator=() [2/2]

template<detail::MirroredHistorySample SampleType>
MirroredHistoryBuffer & pulp::signal::MirroredHistoryBuffer< SampleType >::operator= ( MirroredHistoryBuffer< SampleType > && other)
inlinenoexcept

◆ prepare()

template<detail::MirroredHistorySample SampleType>
bool pulp::signal::MirroredHistoryBuffer< SampleType >::prepare ( std::size_t capacity)
inline

Allocates control-thread storage transactionally.

Returns false when doubling the requested capacity would overflow size_t; the existing history remains unchanged. Allocation failure follows std::vector's build-mode policy (exception or termination).

◆ push()

template<detail::MirroredHistorySample SampleType>
void pulp::signal::MirroredHistoryBuffer< SampleType >::push ( SampleType sample)
inlinenoexcept

◆ reset()

template<detail::MirroredHistorySample SampleType>
void pulp::signal::MirroredHistoryBuffer< SampleType >::reset ( )
inlinenoexcept

◆ window()

template<detail::MirroredHistorySample SampleType>
std::span< const SampleType > pulp::signal::MirroredHistoryBuffer< SampleType >::window ( ) const
inlinenoexcept

The view remains memory-valid until prepare(), but consume it before the next push() or reset() because those calls change its contents and may change which physical span represents the ordered history.


The documentation for this class was generated from the following file: