#ifndef __FILE_HPP #define __FILE_HPP class File { public: File() { readLocks=writeLocks=0; } virtual ~File() {} //info virtual long getFileSize() const =0; virtual long seek(long offset, int fromwhere=0) =0; virtual long tell() const =0; //R/W virtual int read(void *buf, unsigned bytes) const =0; virtual int write(const void *buf, unsigned bytes) =0; virtual int chsize(long size) =0; //locking int writeLock(); int readLock(); int writeUnlock(); int readUnlock(); protected: virtual int do_writeLock() =0; virtual int do_readLock() =0; virtual int do_writeUnlock() =0; virtual int do_readUnlock() =0; protected: int writeLocks; int readLocks; }; class TemporaryFile : public File { public: TemporaryFile(); ~TemporaryFile(); int create(unsigned long expectedSize); //info virtual long getFileSize() const; virtual long seek(long offset, int fromwhere); virtual long tell() const; //R/W virtual int read(void *buf, unsigned bytes) const; virtual int write(const void *buf, unsigned bytes); virtual int chsize(long size); protected: virtual int do_writeLock(); virtual int do_readLock(); virtual int do_writeUnlock(); virtual int do_readUnlock(); private: char filename[128]; long currentSize; long currentPos; char *buffer; int buffersize; int fd; }; class PersistentFile : public File { public: PersistentFile(const char *fn); ~PersistentFile(); int open(); int create(unsigned long expectedSize); int createtrunc(unsigned long expectedSize); //info virtual long getFileSize() const; virtual long seek(long offset, int fromwhere); virtual long tell() const; //R/W virtual int read(void *buf, unsigned bytes) const; virtual int write(const void *buf, unsigned bytes); virtual int chsize(long size); protected: virtual int do_writeLock(); virtual int do_readLock(); virtual int do_writeUnlock(); virtual int do_readUnlock(); private: char filename[128]; int fd; }; #endif