#include "binstr.h"
binsbase::binsbase(void *str, unsigned long len)
: data((Byte *)str), spos((Byte *)str), length(len)
{
}
binsbase::~binsbase()
{
}
void binsbase::seek(long p, Offset offs)
{
switch(offs) {
case Set: spos = data + p; break;
case Add: spos += p; break;
case End: spos = data + length - 1 + p; break;
}
if(spos < data) {
err |= Eof;
spos = data;
return;
}
if(spos - data >= length) {
err |= Eof;
spos = data + length - 1;
}
}
long binsbase::pos()
{
return (long)(spos - data);
}
binisstream::binisstream(void *str, unsigned long len)
: binsbase(str, len)
{
}
binisstream::~binisstream()
{
}
binisstream::Byte binisstream::getByte()
{
Byte in = 0;
if(spos - data >= length)
err |= Eof;
else {
in = *spos;
spos++;
}
return in;
}
binosstream::binosstream(void *str, unsigned long len)
: binsbase(str, len)
{
}
binosstream::~binosstream()
{
}
void binosstream::putByte(Byte b)
{
*spos = b;
spos++;
if(spos - data >= length)
spos = data + length - 1;
}
binsstream::binsstream(void *str, unsigned long len)
: binsbase(str, len), binisstream(str, len), binosstream(str, len)
{
}
binsstream::~binsstream()
{
}