1 | /* ************************************************************************** * |
---|
2 | * Copyright © IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011 * |
---|
3 | * ************************************************************************** */ |
---|
4 | |
---|
5 | #ifndef __EXCEPTION_HPP__ |
---|
6 | #define __EXCEPTION_HPP__ |
---|
7 | |
---|
8 | #ifndef __XIOS_NO_EXTERN |
---|
9 | |
---|
10 | // C++ standard headers |
---|
11 | # include <sstream> |
---|
12 | |
---|
13 | #endif // __XIOS_NO_EXTERN |
---|
14 | |
---|
15 | // XMLIOServer headers |
---|
16 | #include "object.hpp" |
---|
17 | |
---|
18 | |
---|
19 | /** |
---|
20 | * \file exception.hpp |
---|
21 | * \brief Gestion des erreurs levées lors de l'exécution de programme (entête). |
---|
22 | * \author Hervé Ozdoba |
---|
23 | * \version 0.4 |
---|
24 | * \date 9 Juin 2011 |
---|
25 | */ |
---|
26 | |
---|
27 | // ////////////////////////////// Déclarations ///////////////////////////// // |
---|
28 | |
---|
29 | namespace xmlioserver |
---|
30 | { |
---|
31 | /** |
---|
32 | * \class CException |
---|
33 | * \brief Classe de gestion des événnements inhabituels qui surviennent lors |
---|
34 | * de l'exécution du programme en production. |
---|
35 | * \see XIOS_ERROR(id, message) |
---|
36 | * |
---|
37 | * <i> Exemple de levée d'exception: </i> |
---|
38 | * \code |
---|
39 | * //> LÚve une exception nommée 'mon_exception' contenant un message détaillé. |
---|
40 | * CException("mon_exception").getStream() |
---|
41 | * << "Ceci un message décrivant le problÚme rencontré durant l'exécution"; |
---|
42 | * \endcode |
---|
43 | * <i> Exemple de traitement d'exception: </i> |
---|
44 | * \code |
---|
45 | * //> Traitement une exception levée lors de l'exécution d'un code. |
---|
46 | * try |
---|
47 | * { |
---|
48 | * // Code générant une exception ... |
---|
49 | * } |
---|
50 | * catch (xios::CException & _exception) |
---|
51 | * { |
---|
52 | * // Affichage du message d'erreur et arrêt du programme. |
---|
53 | * std::cerr << _exception.getMessage() << std::endl; |
---|
54 | * exit(-1); |
---|
55 | * } |
---|
56 | * \endcode |
---|
57 | */ |
---|
58 | class CException |
---|
59 | : private CObject, public std::ostringstream |
---|
60 | { |
---|
61 | typedef CObject SuperClass; /*!< Redéfinition de CObject. */ |
---|
62 | typedef std::ostringstream SuperClassStream; /*!< Redéfinition de std::ostringstream. */ |
---|
63 | |
---|
64 | public : // Constructeurs |
---|
65 | |
---|
66 | //! \brief Constructeur simple d'une exception anonyme. |
---|
67 | CException(void); |
---|
68 | |
---|
69 | /*! |
---|
70 | * \brief Constructeur simple d'une exception identifiée. |
---|
71 | * \param _id : une chaîne de caractÚre permettant d'identifier l'exception. |
---|
72 | */ |
---|
73 | explicit CException(const std::string & _id); |
---|
74 | |
---|
75 | /*! |
---|
76 | * \brief Constructeur par copie . |
---|
77 | * \param _exception : référence de l'exception à copier. |
---|
78 | */ |
---|
79 | CException(const CException & _exception); |
---|
80 | |
---|
81 | /*! |
---|
82 | * \brief Constructeur par copie. |
---|
83 | * \param _exception_ptr : le pointeur sur l'exception à copier. |
---|
84 | */ |
---|
85 | CException(const CException * const _exception_ptr); // NIY |
---|
86 | |
---|
87 | public : // Accesseurs |
---|
88 | |
---|
89 | /*! |
---|
90 | * \brief Retourne un flux d'écriture du message d'erreur. |
---|
91 | * \return un flux d'entrée permettant de décrire l'événement survenu. |
---|
92 | */ |
---|
93 | SuperClassStream & getStream(void); |
---|
94 | |
---|
95 | /*! |
---|
96 | * \brief Retourne un message d'erreur. |
---|
97 | * \return une chaîne de caractÚre décrivant l'événement survenu. |
---|
98 | */ |
---|
99 | const std::string getMessage(void) const; |
---|
100 | |
---|
101 | public : // Destructeur |
---|
102 | |
---|
103 | //! \brief Destructeur de l'objet. |
---|
104 | virtual ~CException(void); |
---|
105 | |
---|
106 | public : // Autre |
---|
107 | |
---|
108 | virtual std::string toString(void) const; |
---|
109 | virtual void fromString(const std::string & _str); |
---|
110 | |
---|
111 | private : // Propriétés |
---|
112 | |
---|
113 | /*! |
---|
114 | * \brief Indique si l'exception doit être de nouveau levée |
---|
115 | * Ã la destruction de l'objet courant. |
---|
116 | */ |
---|
117 | bool desc_rethrow; |
---|
118 | |
---|
119 | }; // CException |
---|
120 | |
---|
121 | } // namespace xmlioserver |
---|
122 | |
---|
123 | #endif // __EXCEPTION_HPP__ |
---|
124 | |
---|