1 | /* ************************************************************************** * |
---|
2 | * Copyright © IPSL/LSCE, XMLIOServer, Avril 2010 - Octobre 2011 * |
---|
3 | * ************************************************************************** */ |
---|
4 | |
---|
5 | #ifndef __OBJECT_HPP__ |
---|
6 | #define __OBJECT_HPP__ |
---|
7 | |
---|
8 | /** |
---|
9 | * \file object.hpp |
---|
10 | * \brief Base de tous les objets du projet XMLIOSERVER (entête). |
---|
11 | * \author Hervé Ozdoba |
---|
12 | * \version 0.4 |
---|
13 | * \date 1er Juin 2011 |
---|
14 | */ |
---|
15 | |
---|
16 | #ifndef __XIOS_NO_EXTERN |
---|
17 | |
---|
18 | // C++ standard headers |
---|
19 | #include <string> |
---|
20 | #include <iostream> |
---|
21 | |
---|
22 | // Boost headers |
---|
23 | #include <boost/optional.hpp> |
---|
24 | |
---|
25 | #endif // __XIOS_NO_EXTERN |
---|
26 | |
---|
27 | // ////////////////////////////// Déclarations ///////////////////////////// // |
---|
28 | |
---|
29 | |
---|
30 | /// \brief Espace de nommage regroupant toutes les sources du projet. |
---|
31 | namespace xmlioserver |
---|
32 | { |
---|
33 | /** |
---|
34 | * \class CObject |
---|
35 | * \brief Classe abstraite de base dans l'arborescence d'objets de la bibliothÚque. |
---|
36 | */ |
---|
37 | class CObject |
---|
38 | { |
---|
39 | public : // Destructeur |
---|
40 | |
---|
41 | //! \brief Destructeur de l'objet. |
---|
42 | virtual ~CObject(void); |
---|
43 | |
---|
44 | public : // Accesseurs |
---|
45 | |
---|
46 | /*! |
---|
47 | * \brief Retourne l'identifiant de l'objet. |
---|
48 | * \return la chaîne de caractÚres permettant d'identifier l'objet. |
---|
49 | */ |
---|
50 | const std::string & getId(void) const; |
---|
51 | |
---|
52 | public : // Mutateurs |
---|
53 | |
---|
54 | /// \brief Supprime l'identifiant de l'objet, rendant ce dernier anonyme. |
---|
55 | void resetId(void); |
---|
56 | |
---|
57 | /*! |
---|
58 | * \brief Assigne un identifiant à l'objet courant. |
---|
59 | * \param _new_id : une chaîne de caractÚres identifiant l'objet. |
---|
60 | * \see id |
---|
61 | */ |
---|
62 | void setId(const std::string & _new_id); |
---|
63 | |
---|
64 | public : // Tests sur l'objet |
---|
65 | |
---|
66 | /*! |
---|
67 | * \brief Indique si l'objet est identifié. |
---|
68 | * \return <b>true</b> si l'objet est identifié, <b>false</b> sinon. |
---|
69 | */ |
---|
70 | bool hasId(void) const; |
---|
71 | |
---|
72 | public : // Opérateurs de comparaison |
---|
73 | |
---|
74 | /*! |
---|
75 | * \brief Indique si deux objets sont identiques. |
---|
76 | * \param _other_obj : objet à comparer avec l'élément courant. |
---|
77 | * \return <b>true</b> si les objets sont identiques, <b>false</b> sinon. |
---|
78 | * \remarks Deux objets sont identiques s'ils sont du même type et ont le même identifiant. |
---|
79 | */ |
---|
80 | bool operator == (const CObject & _other_obj) const; |
---|
81 | |
---|
82 | /*! |
---|
83 | * \brief Indique si deux objets sont différents. |
---|
84 | * \param _other_obj : l'objet à comparer avec l'élément courant. |
---|
85 | * \return <b>true</b> si les objets sont différents, <b>false</b> sinon. |
---|
86 | * \remarks Deux objets sont identiques s'ils sont du même type et ont le même identifiant. |
---|
87 | */ |
---|
88 | bool operator != (const CObject & _other_obj) const; |
---|
89 | |
---|
90 | public :// Flux de sortie |
---|
91 | |
---|
92 | /*! |
---|
93 | * \brief Opérateur de flux de sortie ascii. |
---|
94 | * \param _os : un objet de flux de sortie standard. |
---|
95 | * \param _object : l'objet à sérialiser sous forme ascii. |
---|
96 | * \return Le paramÚtre _os éventuellement modifié aprÚs appel de la méthode. |
---|
97 | * \see toString |
---|
98 | */ |
---|
99 | friend std::ostream & operator << (std::ostream & _os, const CObject & _object); |
---|
100 | |
---|
101 | public : // virtual - Autres méthodes |
---|
102 | |
---|
103 | |
---|
104 | /*! |
---|
105 | * \brief Retourne une représentation ascii de l'objet. |
---|
106 | * \return Une représentation ascii de l'objet |
---|
107 | * \see fromString |
---|
108 | */ |
---|
109 | virtual std::string toString(void) const = 0; |
---|
110 | |
---|
111 | /*! |
---|
112 | * \brief Modifie l'objet en fonction d'une chaîne de caractÚre. |
---|
113 | * \param _object_str : une représentation ascii de l'objet |
---|
114 | * \see toString |
---|
115 | */ |
---|
116 | virtual void fromString(const std::string & _object_str) = 0; |
---|
117 | |
---|
118 | protected : // Constructeurs |
---|
119 | |
---|
120 | //! \brief Constructeur simple d'un objet anonyme (ie sans identifiant). |
---|
121 | CObject(void); |
---|
122 | |
---|
123 | /*! |
---|
124 | * \brief Constructeur simple d'un objet identifié. |
---|
125 | * \param _id : une chaîne de caractÚre permettant d'identifier l'objet. |
---|
126 | * \see id |
---|
127 | */ |
---|
128 | explicit CObject(const std::string & _id); |
---|
129 | |
---|
130 | /*! |
---|
131 | * \brief Constructeur par copie . |
---|
132 | * \remarks L'objet d'origine (<i>référencé</i>) n'est jamais modifié. |
---|
133 | * \param _object : référence de l'objet à copier. |
---|
134 | */ |
---|
135 | CObject(const CObject & _object); |
---|
136 | |
---|
137 | /*! |
---|
138 | * \brief Constructeur par copie. |
---|
139 | * \remarks L'objet d'origine (<i>pointé</i>) n'est jamais modifié. |
---|
140 | * \param _object_ptr : le pointeur sur l'objet à copier. |
---|
141 | */ |
---|
142 | CObject(const CObject * const _object_ptr); // NIY |
---|
143 | |
---|
144 | private : // Propriétés |
---|
145 | |
---|
146 | boost::optional<std::string> id ; /*!< \brief (optionnel) Identifiant de l'objet. */ |
---|
147 | |
---|
148 | }; // class CObject |
---|
149 | |
---|
150 | } // namespace xmlioserver |
---|
151 | |
---|
152 | #endif // __OBJECT_HPP__ |
---|
153 | |
---|