#ifndef __HANDLE_H__ #define __HANDLE_H__ #include #include #include #include #include #include class Handle : public Base { public: Handle(const Handle &); virtual ~Handle(); virtual ssize_t read(void * buf, size_t count) throw (GeneralException); virtual ssize_t write(const void * buf, size_t count) throw (GeneralException); Uint8 readU8(); Uint16 readU16(); Uint32 readU32(); void writeU8(Uint8); void writeU16(Uint16); void writeU32(Uint32); void copyto(Handle *, ssize_t = -1); void copyfrom(Handle *, ssize_t = -1); bool IsClosed(void) const; bool IsNonBlock(void) const; void SetNonBlock(void); virtual bool CanRead() const; virtual bool CanWrite() const; virtual bool CanSeek() const; virtual off_t seek(off_t, int = SEEK_SET) throw (GeneralException); virtual off_t tell() const; virtual String GetName() const; virtual ssize_t GetSize() const; virtual time_t GetModif() const; void close() throw (GeneralException); int GetHandle(); virtual bool CanWatch() const; virtual int Dup() const throw (GeneralException); virtual void SetZ(int = 9) throw (GeneralException); virtual void Flush(); protected: Handle(int h); int GetHandle() const; off_t itell; private: ssize_t uwrite(const void *, size_t) throw (GeneralException); ssize_t uread(void *, size_t); int h; bool closed, nonblock; gzFile zfile; z_stream zstrm; int z, c; }; Handle & operator<<(Handle &, const String &); Handle & operator>>(Handle &, String &); void copy(Handle *, Handle *, ssize_t = -1); #endif