#ifndef __HANDLE_H__ #define __HANDLE_H__ #ifdef __cplusplus #include #include #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(); virtual ssize_t read(void *buf, size_t count) throw (IOGeneral); virtual ssize_t write(const void *buf, size_t count) throw (IOGeneral); bool IsClosed(void); bool IsNonBlock(void); void SetNonBlock(void); virtual bool CanRead(); virtual bool CanWrite(); virtual String GetName(); protected: Handle(int h); int GetHandle(); void close(); private: int h; bool closed, nonblock; }; Handle & operator<<(Handle &, const String &); Handle & operator>>(Handle &, String &); #else #error This only works with a C++ compiler #endif #endif