feat: Add peek and pop methods
This commit is contained in:
parent
9a0907ea7f
commit
a34087c92c
|
|
@ -48,9 +48,11 @@ public:
|
||||||
public:
|
public:
|
||||||
void write(DataType inData);
|
void write(DataType inData);
|
||||||
void write(const DataType* inData, int inSize);
|
void write(const DataType* inData, int inSize);
|
||||||
|
void pop(int inNumberOfItems = 1);
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
DataType peek(int inOffset = 0) const;
|
||||||
DataType read();
|
DataType read();
|
||||||
void read(DataType* outData, int inSize);
|
void read(DataType* outData, int inSize);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
template<typename DataType, int Size>
|
||||||
void RingBuffer<DataType, Size>::clear()
|
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>
|
template<typename DataType, int Size>
|
||||||
DataType RingBuffer<DataType, Size>::read()
|
DataType RingBuffer<DataType, Size>::read()
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -170,5 +170,34 @@ TEST(RingBuffer, readArrayOverflow)
|
||||||
EXPECT_EQ(buffer.getLength(), 0);
|
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
|
END_UNNAMED_NAMESPACE
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue