mirror of
https://github.com/ksherlock/profuse.git
synced 2026-04-21 20:17:36 +00:00
git-svn-id: https://profuse.googlecode.com/svn/branches/v2@218 aa027e90-d47c-11dd-86d7-074df07e0730
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
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;
|
||||
}
|
||||
|
||||
void writeBytes(const void *src, unsigned count)
|
||||
{
|
||||
std::memcpy(_offset + (uint8_t *)_buffer, src, count);
|
||||
_offset += count;
|
||||
}
|
||||
|
||||
void writeZero(unsigned count)
|
||||
{
|
||||
std::memset(_offset + (uint8_t *)_buffer, 0, count);
|
||||
|
||||
_offset += count;
|
||||
}
|
||||
|
||||
|
||||
uint8_t read8()
|
||||
{
|
||||
uint8_t x = Read8(_buffer, _offset);
|
||||
_offset += 1;
|
||||
return x;
|
||||
}
|
||||
|
||||
uint16_t read16()
|
||||
{
|
||||
uint16_t x = Read16(_buffer, _offset);
|
||||
_offset += 2;
|
||||
return x;
|
||||
}
|
||||
|
||||
uint32_t read24()
|
||||
{
|
||||
uint32_t x = Read24(_buffer, _offset);
|
||||
_offset += 3;
|
||||
return x;
|
||||
}
|
||||
|
||||
uint32_t read32()
|
||||
{
|
||||
uint32_t x = Read32(_buffer, _offset);
|
||||
_offset += 4;
|
||||
return x;
|
||||
}
|
||||
|
||||
void readBytes(void *dest, unsigned count)
|
||||
{
|
||||
std::memcpy(dest, _offset + (uint8_t *)_buffer, count);
|
||||
_offset += count;
|
||||
}
|
||||
|
||||
|
||||
unsigned offset() const { return _offset; }
|
||||
void setOffset(unsigned offset) { _offset = offset; }
|
||||
|
||||
void setOffset(unsigned offset, bool zero)
|
||||
{
|
||||
if (zero && offset > _offset)
|
||||
{
|
||||
writeZero(offset - _offset);
|
||||
}
|
||||
else setOffset(offset);
|
||||
}
|
||||
|
||||
unsigned size() const { return _size; }
|
||||
|
||||
void *buffer() const { return _buffer; }
|
||||
|
||||
private:
|
||||
void *_buffer;
|
||||
unsigned _size;
|
||||
unsigned _offset;
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user