summaryrefslogtreecommitdiff
path: root/include/Handle.h
diff options
context:
space:
mode:
authorPixel <Pixel>2001-09-20 23:27:01 +0000
committerPixel <Pixel>2001-09-20 23:27:01 +0000
commit8346d0774d2d1e076038db27f65f1d082a460f16 (patch)
tree132f84cf1ef45d5006a2b1d52d4d40b1e8e51abc /include/Handle.h
Initial revision
Diffstat (limited to 'include/Handle.h')
-rw-r--r--include/Handle.h51
1 files changed, 51 insertions, 0 deletions
diff --git a/include/Handle.h b/include/Handle.h
new file mode 100644
index 0000000..cec51c7
--- /dev/null
+++ b/include/Handle.h
@@ -0,0 +1,51 @@
+#ifndef __HANDLE_H__
+#define __HANDLE_H__
+#ifdef __cplusplus
+
+#include <unistd.h>
+#include <iostream.h>
+#include "String.h"
+#include "Exceptions.h"
+
+/*
+ * Pour les classes qui vont deriver: le constructeur Handle(int) specifie
+ * le handle a stocker. De meme, GetHandle sert a lire le handle stocke.
+ *
+ * Les operateurs >> et << ne fonctionnent qu'avec des String. Vu que la
+ * classe String possede des constructeurs pour tous les types utiles, cela
+ * ne posera pas de problemes. >> va lire une ligne en supprimant les caractères
+ * '\n' des fins de lignes et en ignorant '\r'.
+ *
+ * Les fonctions read et write sont les memes que les fonctions systeme read
+ * et write.
+ *
+ * Les booleens CanRead et CanWrite indiquent si le handle peut lire ou ecrire.
+ *
+ * GetName donne le nom associe au handle. (nom de fichier ou autre)
+ */
+
+class Handle : public Base {
+ public:
+ Handle(const Handle &);
+ virtual ~Handle();
+ ssize_t read(void *buf, size_t count) throw (IOException);
+ ssize_t write(const void *buf, size_t count) throw (IOException);
+ bool IsClosed(void);
+ virtual bool CanRead() = 0;
+ virtual bool CanWrite() = 0;
+ virtual String GetName() = 0;
+ protected:
+ Handle(int h);
+ int GetHandle();
+ private:
+ int h;
+ bool closed;
+};
+
+Handle & operator<<(Handle &, const String &);
+Handle & operator>>(Handle &, String &);
+
+#else
+#error This only works with a C++ compiler
+#endif
+#endif