summaryrefslogtreecommitdiff
path: root/include/Exceptions.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/Exceptions.h
Initial revision
Diffstat (limited to 'include/Exceptions.h')
-rw-r--r--include/Exceptions.h86
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