#ifndef H_BINIO_BINFILE
#define H_BINIO_BINFILE
#include <stdio.h>
#include "binio.h"
class binfbase: virtual public binio
{
public:
typedef enum {
Append = 1 << 0,
NoCreate = 1 << 1
} ModeFlags;
typedef int Mode;
binfbase();
virtual ~binfbase();
virtual void open(const char *filename, const Mode mode) = 0;
#if BINIO_ENABLE_STRING
virtual void open(const std::string &filename, const Mode mode) = 0;
#endif
void close();
virtual void seek(long pos, Offset offs = Set);
virtual long pos();
protected:
FILE *f;
};
class binifstream: public binistream, virtual public binfbase
{
public:
binifstream();
binifstream(const char *filename, const Mode mode = NoCreate);
#if BINIO_ENABLE_STRING
binifstream(const std::string &filename, const Mode mode = NoCreate);
#endif
virtual ~binifstream();
virtual void open(const char *filename, const Mode mode = NoCreate);
#if BINIO_ENABLE_STRING
virtual void open(const std::string &filename, const Mode mode = NoCreate);
#endif
protected:
virtual Byte getByte();
};
class binofstream: public binostream, virtual public binfbase
{
public:
binofstream();
binofstream(const char *filename, const Mode mode = 0);
#if BINIO_ENABLE_STRING
binofstream(const std::string &filename, const Mode mode = 0);
#endif
virtual ~binofstream();
virtual void open(const char *filename, const Mode mode = 0);
#if BINIO_ENABLE_STRING
virtual void open(const std::string &filename, const Mode mode = 0);
#endif
protected:
virtual void putByte(Byte b);
};
class binfstream: public binifstream, public binofstream
{
public:
binfstream();
binfstream(const char *filename, const Mode mode = 0);
#if BINIO_ENABLE_STRING
binfstream(const std::string &filename, const Mode mode = 0);
#endif
virtual ~binfstream();
virtual void open(const char *filename, const Mode mode = 0);
#if BINIO_ENABLE_STRING
virtual void open(const std::string &filename, const Mode mode = 0);
#endif
};
#endif