实现一个C++的FIFO功能,实现代码如下:

头文件fifo.h

#ifndef FIFO_H
#define FIFO_H
#include <QtGlobal>
class Fifo
{
public:
Fifo(quint32 size);
~Fifo();
bool is_empty();
bool is_full();
bool write(quint8 data);
quint32 read(quint8 *pdata);
private:
quint8 *m_pdata;
quint32 m_ptr_wr;
quint32 m_ptr_rd;
quint32 m_size;
};
#endif // FIFO_H

源文件fifo.c

#include "fifo.h"
Fifo::Fifo(quint32 size)
{
m_pdata = new quint8[size];
m_size = size;
m_ptr_wr = 0;
m_ptr_rd = 0;
}
Fifo::~Fifo()
{
delete []m_pdata;
}
bool Fifo::is_empty()
{
return (m_ptr_wr == m_ptr_rd);
}
bool Fifo::is_full()
{
return ((m_ptr_wr + 1 % m_size) == m_ptr_rd);
}
bool Fifo::write(quint8 data)
{
if(is_full())
{
return false;
}
m_ptr_wr = (m_ptr_wr + 1) % m_size;
m_pdata[m_ptr_wr] = data;
return true;
}
quint32 Fifo::read(quint8 *pdata)
{
if(is_empty())
{
return false;
}
m_ptr_rd = (m_ptr_rd + 1) % m_size;
*pdata = m_pdata[m_ptr_rd];
return true;
}