/*
 *  Copyright (C)  2000-2001 Marc Wandschneider <mw@kiltdown.org>
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation.
 *
 *  For more information look at the file COPYRIGHT in this package
 *
 */

#ifndef _FILESTREAM_H_

class FileStream : public ICharReadStream, public IByteReadStream,
                   public ICharWriteStream, public IByteWriteStream {

  public:

    virtual int  readData(int count, char *pdata);
    virtual int  readLine(int count, char *pdata);
    virtual int  readChar(char *);
    virtual BOOL seek(SEEKPOINT, int);
    virtual int  readData(int count, BYTE *pdata);
    virtual int  writeData(int count, char *pdata);
    virtual BOOL writeLine(char *pline);
    virtual int  writeData(int count, BYTE *pdata);

    /**
     * ILifetime
     */
    virtual int addRef(void);
    virtual int release(void);

    /**
     * use me to create object !!!
     */
    static BOOL create(char * filename,
                       BOOL readOnly,
                       FileStream **ppout);

    virtual ~FileStream();


  private:
    FileStream();  

    int m_cref;
    FILE *m_file;
    BOOL m_readOnly;

    /**
     * once you've created an object, use me to open the file
     */
    BOOL init(const char *filename);
};

#define _FILESTREAM_H_
#endif // _FILESTREAM_H_


syntax highlighted by Code2HTML, v. 0.9.1