diff options
author | Pixel <Pixel> | 2001-09-20 23:27:01 +0000 |
---|---|---|
committer | Pixel <Pixel> | 2001-09-20 23:27:01 +0000 |
commit | 8346d0774d2d1e076038db27f65f1d082a460f16 (patch) | |
tree | 132f84cf1ef45d5006a2b1d52d4d40b1e8e51abc /include/Exceptions.h |
Initial revision
Diffstat (limited to 'include/Exceptions.h')
-rw-r--r-- | include/Exceptions.h | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/include/Exceptions.h b/include/Exceptions.h new file mode 100644 index 0000000..34c1155 --- /dev/null +++ b/include/Exceptions.h @@ -0,0 +1,86 @@ +#ifndef __EXCEPTIONS_H__ +#define __EXCEPTIONS_H__ +#ifdef __cplusplus + +#include <stdio.h> +#include <unistd.h> +#include <stddef.h> + +/* + * Gère les exceptions du système. Le programme principal devrait tenter + * de les récupérer afin de les afficher. + * GeneralExecption: exception de base. Construite sur une string. + * MemoryException: plus assez de mémoire. Construit une string sur la taille mémoire + * qui a fait défaut. + * IOException: erreur de lecture/écriture. Construite sur le nombre d'octets + * et sur l'opération qui a générée l'erreur. + * IOGeneral: erreur générale sur une opération IO (erreur à l'ouverture notemment) + * IOInternal: erreur interne du programme. En particulier, le programme + * a voulu lire ou écrire alors que le Handle n'était pas prévu pour. + * + * Nous définissons les fonctions xmalloc, xfree et xstrdup. Elles devraient être + * utilisées en lieu et place des fonctions malloc, free et strdup. La fonction realloc + * étant désapréciée, elle n'est pas surchargée. + */ + +// Impossible de surcharger free(void *). Les compilateurs +// refuseront de passer un char * par exemple. +#define free(p) xfree((void*)p) + +// On prédéfinit la classe String, pour éviter +// les deadlocks de compilation... +class String; + +class Base { + public: + char * strdup(const char *) const; + void * malloc(ssize_t) const; +/* void * operator new(size_t); + void * operator new(size_t, void *); */ +}; + +class GeneralException : public Base{ + public: + GeneralException(String); + GeneralException(const GeneralException &); + ~GeneralException(); + char * GetMsg(); + protected: + GeneralException(); + char * msg; + static char t[BUFSIZ]; +}; + +class MemoryException : public GeneralException { + public: + MemoryException(ssize_t); +}; + +enum op_t { + IO_WRITE = 1, + IO_READ +}; + +class IOException : public GeneralException { + public: + IOException(String, op_t, ssize_t); +}; + +class IOGeneral : public GeneralException { + public: + IOGeneral(String); +}; + +class IOInternal : public GeneralException { + public: + IOInternal(String, op_t); +}; + +char * xstrdup(const char *) throw (MemoryException); +void * xmalloc(ssize_t) throw (MemoryException); +void xfree(void *&); + +#else +#error This only works with a C++ compiler +#endif +#endif |