Listing 1: A FILE-based stream interface
/*
* ffstream.h
*/
#if !defined __FFSTREAM_H
#define __FFSTREAM_H
#include <stdio.h>
class ffstream
{ FILE *_fp;
protected:
FILE *filep() const { return _fp; }
public:
ffstream() : _fp(0) {}
ffstream( const char *name, const char *mode )
{ open( name, mode ); }
virtual ~ffstream() { close(); }
void open( const char *name, const char *mode )
{ _fp = fopen( name, mode ); }
virtual size_t read( void *buf,
size_t sz, size_t n )
{ return fread( buf, sz, n, _fp ); }
virtual size_t write( const void *buf,
size_t sz, size_t n )
{ return fwrite( buf, sz, n, _fp ); }
void close() { fclose(_fp); _fp = 0; }
int eof() const { return feof(_fp); }
operator int () //assert class invariant
{ return ((_fp != 0) && !ferror(_fp)); }
void rewind() { ::rewind(_fp); }
};
#endif
// End of File