94 int getTotalSize()
const noexcept;
97 int getFreeSpace()
const noexcept;
100 int getNumReady()
const noexcept;
103 void reset()
noexcept;
109 void setTotalSize (
int newSize)
noexcept;
151 void prepareToWrite (
int numToWrite,
int& startIndex1,
int& blockSize1,
int& startIndex2,
int& blockSize2)
const noexcept;
156 void finishedWrite (
int numWritten)
noexcept;
196 void prepareToRead (
int numWanted,
int& startIndex1,
int& blockSize1,
int& startIndex2,
int& blockSize2)
const noexcept;
201 void finishedRead (
int numRead)
noexcept;
206 enum class ReadOrWrite
214 template <ReadOrWrite mode>
228 prepare (*fifo, num);
243 finish (*fifo, blockSize1 + blockSize2);
249 template <
typename FunctionToApply>
252 for (
auto i = startIndex1, e = startIndex1 + blockSize1; i != e; ++i) func (i);
253 for (
auto i = startIndex2, e = startIndex2 + blockSize2; i != e; ++i) func (i);
256 int startIndex1, blockSize1, startIndex2, blockSize2;
266 using ScopedRead = ScopedReadWrite<ReadOrWrite::read>;
267 using ScopedWrite = ScopedReadWrite<ReadOrWrite::write>;
289 ScopedRead read (
int numToRead)
noexcept;
311 ScopedWrite write (
int numToWrite)
noexcept;
318 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (
AbstractFifo)
322inline void AbstractFifo::ScopedReadWrite<AbstractFifo::ReadOrWrite::read>::finish (AbstractFifo& f,
int num)
noexcept
324 f.finishedRead (num);
328inline void AbstractFifo::ScopedReadWrite<AbstractFifo::ReadOrWrite::write>::finish (AbstractFifo& f,
int num)
noexcept
330 f.finishedWrite (num);
334inline void AbstractFifo::ScopedReadWrite<AbstractFifo::ReadOrWrite::read>::prepare (AbstractFifo& f,
int num)
noexcept
336 f.prepareToRead (num, startIndex1, blockSize1, startIndex2, blockSize2);
340inline void AbstractFifo::ScopedReadWrite<AbstractFifo::ReadOrWrite::write>::prepare (AbstractFifo& f,
int num)
noexcept
342 f.prepareToWrite (num, startIndex1, blockSize1, startIndex2, blockSize2);
Class for a scoped reader/writer.
ScopedReadWrite(AbstractFifo &f, int num) noexcept
Construct a reader/writer and immediately call prepareRead/prepareWrite on the abstractFifo which was...
void forEach(FunctionToApply &&func) const
Calls the passed function with each index that was deemed valid for the current read/write operation.
ScopedReadWrite()=default
Construct an unassigned reader/writer.
Encapsulates the logic required to implement a lock-free FIFO.
#define JUCE_API
This macro is added to all JUCE public class declarations.
A simple wrapper around std::atomic.