81 int getTotalSize()
const noexcept;
84 int getFreeSpace()
const noexcept;
87 int getNumReady()
const noexcept;
90 void reset()
noexcept;
96 void setTotalSize (
int newSize)
noexcept;
138 void prepareToWrite (
int numToWrite,
int& startIndex1,
int& blockSize1,
int& startIndex2,
int& blockSize2)
const noexcept;
143 void finishedWrite (
int numWritten)
noexcept;
183 void prepareToRead (
int numWanted,
int& startIndex1,
int& blockSize1,
int& startIndex2,
int& blockSize2)
const noexcept;
188 void finishedRead (
int numRead)
noexcept;
193 enum class ReadOrWrite
201 template <ReadOrWrite mode>
215 prepare (*fifo, num);
230 finish (*fifo, blockSize1 + blockSize2);
236 template <
typename FunctionToApply>
239 for (
auto i = startIndex1, e = startIndex1 + blockSize1; i != e; ++i) func (i);
240 for (
auto i = startIndex2, e = startIndex2 + blockSize2; i != e; ++i) func (i);
243 int startIndex1, blockSize1, startIndex2, blockSize2;
253 using ScopedRead = ScopedReadWrite<ReadOrWrite::read>;
254 using ScopedWrite = ScopedReadWrite<ReadOrWrite::write>;
276 ScopedRead read (
int numToRead)
noexcept;
298 ScopedWrite write (
int numToWrite)
noexcept;
305 JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (
AbstractFifo)
309inline void AbstractFifo::ScopedReadWrite<AbstractFifo::ReadOrWrite::read>::finish (AbstractFifo& f,
int num)
noexcept
311 f.finishedRead (num);
315inline void AbstractFifo::ScopedReadWrite<AbstractFifo::ReadOrWrite::write>::finish (AbstractFifo& f,
int num)
noexcept
317 f.finishedWrite (num);
321inline void AbstractFifo::ScopedReadWrite<AbstractFifo::ReadOrWrite::read>::prepare (AbstractFifo& f,
int num)
noexcept
323 f.prepareToRead (num, startIndex1, blockSize1, startIndex2, blockSize2);
327inline void AbstractFifo::ScopedReadWrite<AbstractFifo::ReadOrWrite::write>::prepare (AbstractFifo& f,
int num)
noexcept
329 f.prepareToWrite (num, startIndex1, blockSize1, startIndex2, blockSize2);
ScopedReadWrite(AbstractFifo &f, int num) noexcept
void forEach(FunctionToApply &&func) const
ScopedReadWrite()=default