feat: Add peek and pop methods

This commit is contained in:
Francois Best 2018-11-03 18:56:42 +01:00
parent 9a0907ea7f
commit a34087c92c
3 changed files with 47 additions and 0 deletions

View File

@ -48,9 +48,11 @@ public:
public:
void write(DataType inData);
void write(const DataType* inData, int inSize);
void pop(int inNumberOfItems = 1);
void clear();
public:
DataType peek(int inOffset = 0) const;
DataType read();
void read(DataType* outData, int inSize);

View File

@ -93,6 +93,15 @@ void RingBuffer<DataType, Size>::write(const DataType* inData, int inSize)
}
}
template<typename DataType, int Size>
void RingBuffer<DataType, Size>::pop(int inNumberOfItems)
{
for (int i = 0; i < inNumberOfItems; ++i)
{
read();
}
}
template<typename DataType, int Size>
void RingBuffer<DataType, Size>::clear()
{
@ -104,6 +113,13 @@ void RingBuffer<DataType, Size>::clear()
// -----------------------------------------------------------------------------
template<typename DataType, int Size>
DataType RingBuffer<DataType, Size>::peek(int inOffset) const
{
const int head = (mReadHead + inOffset) & sMask;
return mData[head];
}
template<typename DataType, int Size>
DataType RingBuffer<DataType, Size>::read()
{

View File

@ -170,5 +170,34 @@ TEST(RingBuffer, readArrayOverflow)
EXPECT_EQ(buffer.getLength(), 0);
}
TEST(RingBuffer, peek)
{
Buffer buffer;
const uint8_t input[4] = {
1, 2, 3, 4
};
buffer.write(input, 4);
EXPECT_EQ(1, buffer.peek());
EXPECT_EQ(2, buffer.peek(1));
EXPECT_EQ(3, buffer.peek(2));
EXPECT_EQ(4, buffer.peek(3));
EXPECT_EQ(4, buffer.getLength()) << "Peek should not change buffer length";
}
TEST(RingBuffer, pop)
{
Buffer buffer;
const uint8_t input[4] = {
1, 2, 3, 4
};
buffer.write(input, 4);
buffer.pop();
EXPECT_EQ(3, buffer.getLength());
buffer.pop(2);
EXPECT_EQ(1, buffer.getLength());
}
END_UNNAMED_NAMESPACE