#ifndef ARM_TRC_RAW_BUFFER_H_INCLUDED
#define ARM_TRC_RAW_BUFFER_H_INCLUDED
#include <vector>
class TraceRawBuffer
{
public:
TraceRawBuffer() :
m_bufSize(0),
m_bufProcessed(0),
m_pBuffer(0),
pkt(0)
{};
~TraceRawBuffer() {};
void init(const uint32_t size, const uint8_t *rawtrace, std::vector<uint8_t> *out_packet);
void copyByteToPkt(); uint8_t peekNextByte();
bool empty() { return m_bufProcessed == m_bufSize; };
uint32_t processed() { return m_bufProcessed; };
uint32_t size() { return m_bufSize; }
private:
uint32_t m_bufSize;
uint32_t m_bufProcessed;
const uint8_t *m_pBuffer;
std::vector<uint8_t> *pkt;
};
inline void TraceRawBuffer::init(const uint32_t size, const uint8_t *rawtrace, std::vector<uint8_t> *out_packet)
{
m_bufSize = size;
m_bufProcessed = 0;
m_pBuffer = rawtrace;
pkt = out_packet;
}
inline void TraceRawBuffer::copyByteToPkt()
{
if (!empty()) {
pkt->push_back(m_pBuffer[m_bufProcessed]);
m_bufProcessed++;
}
}
inline uint8_t TraceRawBuffer::peekNextByte()
{
uint8_t val = 0;
if (!empty())
val = m_pBuffer[m_bufProcessed];
return val;
}
#endif