#include "binwrap.h"
#if BINIO_ENABLE_IOSTREAM
biniwstream::biniwstream(istream *istr)
: in(istr)
{
}
biniwstream::~biniwstream()
{
}
void biniwstream::seek(long pos, Offset offs)
{
if(!in) { err = NotOpen; return; }
switch(offs) {
case Set: in->seekg(pos, ios::beg); break;
case Add: in->seekg(pos, ios::cur); break;
case End: in->seekg(pos, ios::end); break;
}
}
biniwstream::Byte biniwstream::getByte()
{
if(!in) { err = NotOpen; return 0; }
int i = in->get();
if(i == EOF) err |= Eof;
return (Byte)i;
}
long biniwstream::pos()
{
if(!in) { err = NotOpen; return 0; }
return (long)in->tellg();
}
binowstream::binowstream(ostream *ostr)
: out(ostr)
{
}
binowstream::~binowstream()
{
}
void binowstream::seek(long pos, Offset offs)
{
if(!out) { err = NotOpen; return; }
switch(offs) {
case Set: out->seekp(pos, ios::beg); break;
case Add: out->seekp(pos, ios::cur); break;
case End: out->seekp(pos, ios::end); break;
}
}
void binowstream::putByte(binio::Byte b)
{
if(!out) { err = NotOpen; return; }
out->put((char)b);
}
long binowstream::pos()
{
if(!out) { err = NotOpen; return 0; }
return (long)out->tellp();
}
binwstream::binwstream(iostream *str)
: biniwstream(str), binowstream(str), io(str)
{
}
binwstream::~binwstream()
{
}
void binwstream::seek(long pos, Offset offs)
{
biniwstream::seek(pos, offs);
binowstream::seek(pos, offs);
}
long binwstream::pos()
{
if(!io) { err = NotOpen; return 0; }
return (long)io->tellg();
}
binwstream::Byte binwstream::getByte()
{
Byte in = biniwstream::getByte();
binowstream::seek(biniwstream::pos(), Set); return in;
}
void binwstream::putByte(Byte b)
{
binowstream::putByte(b);
biniwstream::seek(binowstream::pos(), Set); }
#endif