summaryrefslogtreecommitdiff
path: root/includes/Handle.h
diff options
context:
space:
mode:
Diffstat (limited to 'includes/Handle.h')
-rw-r--r--includes/Handle.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/includes/Handle.h b/includes/Handle.h
new file mode 100644
index 0000000..3b9c9dc
--- /dev/null
+++ b/includes/Handle.h
@@ -0,0 +1,50 @@
+#ifndef __HANDLE_H__
+#define __HANDLE_H__
+#ifdef __cplusplus
+
+#include <zlib.h>
+#include <unistd.h>
+#include <iostream.h>
+#include <String.h>
+#include <Exceptions.h>
+
+#include <sys/types.h>
+#include <time.h>
+
+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 String GetName();
+ virtual ssize_t GetSize();
+ virtual time_t GetModif();
+ void close() throw (GeneralException);
+ int GetHandle();
+ virtual bool CanWatch();
+ virtual void Dup(const Handle &);
+ virtual void SetZ(int) throw (GeneralException);
+ protected:
+ Handle(int h);
+ private:
+ ssize_t uwrite(const void *, size_t) throw (GeneralException);
+ ssize_t uread(void *, size_t);
+ int h;
+ bool closed, nonblock;
+ gzFile zfile;
+ int z;
+};
+
+Handle & operator<<(Handle &, const String &);
+Handle & operator>>(Handle &, String &);
+
+#else
+#error This only works with a C++ compiler
+#endif
+#endif