38 return ve >= vs ? (ve - vs) : (
bufferSize - (vs - ve));
56 int& startIndex2,
int& blockSize2)
const noexcept
61 auto freeSpace = ve >= vs ? (
bufferSize - (ve - vs)) : (vs - ve);
62 numToWrite =
jmin (numToWrite, freeSpace - 1);
76 numToWrite -= blockSize1;
77 blockSize2 = numToWrite <= 0 ? 0 :
jmin (numToWrite, vs);
85 auto newEnd =
validEnd.get() + numWritten;
94 int& startIndex2,
int& blockSize2)
const noexcept
99 auto numReady = ve >= vs ? (ve - vs) : (
bufferSize - (vs - ve));
100 numWanted =
jmin (numWanted, numReady);
114 numWanted -= blockSize1;
115 blockSize2 = numWanted <= 0 ? 0 :
jmin (numWanted, ve);
132template <AbstractFifo::ReadOrWrite mode>
142template <AbstractFifo::ReadOrWrite mode>
150template <AbstractFifo::ReadOrWrite mode>
153 std::swap (other.fifo,
fifo);
171class AbstractFifoTests :
public UnitTest
178 struct WriteThread :
public Thread
180 WriteThread (AbstractFifo&
f,
int*
b, Random rng)
181 : Thread (
"fifo writer"), fifo (
f), buffer (
b), random (rng)
195 while (! threadShouldExit())
197 int num = random.nextInt (2000) + 1;
199 auto writer = fifo.write (num);
201 jassert (writer.blockSize1 >= 0 && writer.blockSize2 >= 0);
202 jassert (writer.blockSize1 == 0
203 || (writer.startIndex1 >= 0 && writer.startIndex1 < fifo.getTotalSize()));
204 jassert (writer.blockSize2 == 0
205 || (writer.startIndex2 >= 0 && writer.startIndex2 < fifo.getTotalSize()));
207 writer.forEach ([
this, &
n] (
int index) { this->
buffer[index] =
n++; });
218 void runTest()
override
220 beginTest (
"AbstractFifo");
223 AbstractFifo fifo (numElementsInArray (buffer));
225 WriteThread writer (fifo, buffer, getRandom());
228 Random
r = getRandom();
229 r.combineSeed (12345);
233 int num =
r.nextInt (6000) + 1;
235 auto reader = fifo.read (num);
237 if (! (reader.blockSize1 >= 0 && reader.blockSize2 >= 0)
238 && (reader.blockSize1 == 0
239 || (reader.startIndex1 >= 0 && reader.startIndex1 < fifo.getTotalSize()))
240 && (reader.blockSize2 == 0
241 || (reader.startIndex2 >= 0 && reader.startIndex2 < fifo.getTotalSize())))
243 expect (
false,
"prepareToRead returned -ve values");
249 reader.forEach ([&failed, &buffer, &
n] (
int index)
251 failed = (
buffer[index] !=
n++) || failed;
256 expect (
false,
"read values were incorrect");
265static AbstractFifoTests fifoUnitTests;
Type jmin(const Type a, const Type b)
Definition MathsFunctions.h:60
#define noexcept
Definition DistrhoDefines.h:72
static void run(LV2_Handle instance, uint32_t n_samples)
Definition bindings_test_plugin.c:112
Definition juce_AbstractFifo.h:203
void swap(ScopedReadWrite &) noexcept
Definition juce_AbstractFifo.cpp:151
AbstractFifo * fifo
Definition juce_AbstractFifo.h:250
int startIndex1
Definition juce_AbstractFifo.h:243
ScopedReadWrite()=default
int blockSize2
Definition juce_AbstractFifo.h:243
int blockSize1
Definition juce_AbstractFifo.h:243
int startIndex2
Definition juce_AbstractFifo.h:243
void reset() noexcept
Definition juce_AbstractFifo.cpp:41
void prepareToWrite(int numToWrite, int &startIndex1, int &blockSize1, int &startIndex2, int &blockSize2) const noexcept
Definition juce_AbstractFifo.cpp:55
Atomic< int > validEnd
Definition juce_AbstractFifo.h:303
ScopedReadWrite< ReadOrWrite::read > ScopedRead
Definition juce_AbstractFifo.h:253
int getTotalSize() const noexcept
Definition juce_AbstractFifo.cpp:31
ScopedRead read(int numToRead) noexcept
Definition juce_AbstractFifo.cpp:163
void prepareToRead(int numWanted, int &startIndex1, int &blockSize1, int &startIndex2, int &blockSize2) const noexcept
Definition juce_AbstractFifo.cpp:93
AbstractFifo(int capacity) noexcept
Definition juce_AbstractFifo.cpp:26
void finishedRead(int numRead) noexcept
Definition juce_AbstractFifo.cpp:119
int getFreeSpace() const noexcept
Definition juce_AbstractFifo.cpp:32
Atomic< int > validStart
Definition juce_AbstractFifo.h:303
void finishedWrite(int numWritten) noexcept
Definition juce_AbstractFifo.cpp:81
ScopedWrite write(int numToWrite) noexcept
Definition juce_AbstractFifo.cpp:164
ScopedReadWrite< ReadOrWrite::write > ScopedWrite
Definition juce_AbstractFifo.h:254
int getNumReady() const noexcept
Definition juce_AbstractFifo.cpp:34
int bufferSize
Definition juce_AbstractFifo.h:302
void setTotalSize(int newSize) noexcept
Definition juce_AbstractFifo.cpp:47
Definition juce_UnitTest.h:70
unsigned f
Definition inflate.c:1572
#define JUCE_BEGIN_IGNORE_WARNINGS_MSVC(warnings)
Definition juce_CompilerWarnings.h:198
#define JUCE_END_IGNORE_WARNINGS_MSVC
Definition juce_CompilerWarnings.h:199
Definition juce_UnitTestCategories.h:27
JOCTET * buffer
Definition juce_JPEGLoader.cpp:302
Definition carla_juce.cpp:31
int n
Definition crypt.c:458
int r
Definition crypt.c:458
#define void
Definition unzip.h:396
_WDL_CSTRING_PREFIX void INT_PTR count
Definition wdlcstring.h:263
#define const
Definition zconf.h:137