diff options
Diffstat (limited to 'include/Handle.h')
-rw-r--r-- | include/Handle.h | 51 |
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 |