#ifndef __HANDLE_H__ #define __HANDLE_H__ #ifdef __cplusplus #ifdef HAVE_ZLIB #include #endif #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); bool IsClosed(void); bool IsNonBlock(void); void SetNonBlock(void); virtual bool CanRead(); virtual bool CanWrite(); virtual bool CanSeek(); virtual off_t seek(off_t, int) throw (GeneralException); virtual off_t tell(); virtual String GetName(); virtual ssize_t GetSize(); virtual time_t GetModif(); void close() throw (GeneralException); int GetHandle(); virtual bool CanWatch(); virtual void Dup(const Handle &); #ifdef HAVE_ZLIB virtual void SetZ(int) throw (GeneralException); #endif protected: Handle(int h); off_t itell; private: ssize_t uwrite(const void *, size_t) throw (GeneralException); ssize_t uread(void *, size_t); int h; bool closed, nonblock; #ifdef HAVE_ZLIB gzFile zfile; int z; #endif }; Handle & operator<<(Handle &, const String &); Handle & operator>>(Handle &, String &); #else #error This only works with a C++ compiler #endif #endif