2009-12-12 15:26:51 +00:00
|
|
|
#ifndef __IOBUFFER_H__
|
|
|
|
#define __IOBUFFER_H__
|
|
|
|
|
|
|
|
#include "../Endian.h"
|
|
|
|
|
2009-12-12 15:38:12 +00:00
|
|
|
#include <cstring>
|
2009-12-12 15:26:51 +00:00
|
|
|
namespace LittleEndian {
|
|
|
|
|
|
|
|
class IOBuffer {
|
|
|
|
public:
|
|
|
|
|
|
|
|
IOBuffer(void *vp, unsigned size)
|
|
|
|
{
|
|
|
|
_buffer = vp;
|
|
|
|
_size = size;
|
|
|
|
_offset = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
void write8(uint8_t value)
|
|
|
|
{
|
|
|
|
Write8(_buffer, _offset, value);
|
|
|
|
_offset += 1;
|
|
|
|
}
|
|
|
|
void write16(uint16_t value)
|
|
|
|
{
|
|
|
|
Write16(_buffer, _offset, value);
|
|
|
|
_offset += 2;
|
|
|
|
}
|
|
|
|
|
|
|
|
void write24(uint32_t value)
|
|
|
|
{
|
|
|
|
Write24(_buffer, _offset, value);
|
|
|
|
_offset += 3;
|
|
|
|
}
|
|
|
|
void write32(uint32_t value)
|
|
|
|
{
|
|
|
|
Write32(_buffer, _offset, value);
|
|
|
|
_offset += 4;
|
|
|
|
}
|
|
|
|
|
2009-12-12 15:38:12 +00:00
|
|
|
void writeBytes(const void *value, unsigned count)
|
2009-12-12 15:26:51 +00:00
|
|
|
{
|
|
|
|
std::memcpy(_offset + (uint8_t *)_buffer, value, count);
|
2009-12-12 19:27:08 +00:00
|
|
|
_offset += count;
|
2009-12-12 15:26:51 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
void writeZero(unsigned count)
|
|
|
|
{
|
|
|
|
uint8_t *cp = _offset + (uint8_t *)_buffer;
|
|
|
|
for (unsigned i = 0; i < count; ++i)
|
|
|
|
{
|
|
|
|
cp[i] = 0;
|
|
|
|
}
|
|
|
|
_offset += count;
|
|
|
|
}
|
|
|
|
|
|
|
|
unsigned offset() const { return _offset; }
|
|
|
|
void setOffset(unsigned offset) { _offset = offset; }
|
|
|
|
|
2009-12-12 15:38:12 +00:00
|
|
|
unsigned size() const { return _size; }
|
2009-12-12 15:26:51 +00:00
|
|
|
|
|
|
|
private:
|
|
|
|
void *_buffer;
|
|
|
|
unsigned _size;
|
|
|
|
unsigned _offset;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|