Remove dynamic exceptions
[anna.git] / include / anna / ldap / Attribute.hpp
1 // ANNA - Anna is Not Nothingness Anymore                                                         //
2 //                                                                                                //
3 // (c) Copyright 2005-2015 Eduardo Ramos Testillano & Francisco Ruiz Rayo                         //
4 //                                                                                                //
5 // See project site at http://redmine.teslayout.com/projects/anna-suite                           //
6 // See accompanying file LICENSE or copy at http://www.teslayout.com/projects/public/anna.LICENSE //
7
8
9 #ifndef anna_ldap_Attribute_hpp
10 #define anna_ldap_Attribute_hpp
11
12 #include <string>
13
14 #include <anna/core/util/Recycler.hpp>
15
16 namespace anna {
17
18 namespace ldap {
19
20 class Session;
21 class Response;
22
23 /**
24    Modela los atributos retornados en una peticion de busqueda.
25
26    Recordar que en LDAP un mismo atributo puede tener asociados un numero indeterminado de valores.
27
28    \see ldap::Response
29 */
30 class Attribute {
31 public:
32   typedef Recycler<std::string> value_container;
33   typedef value_container::const_iterator const_value_iterator;
34
35   /**
36      Devuelve el nombre del atributo.
37      \return El nombre del atributo.
38   */
39   const std::string& getName() const { return a_name; }
40
41   /**
42      Devuelve el iterador al comienzo de la lista de valores asociados a este atributo.
43      \return El iterador al comienzo de la lista de valores asociados a este atributo.
44   */
45   const_value_iterator value_begin() const { return a_values.begin(); }
46
47   /**
48      Devuelve el iterador al final de la lista de valores asociados a este atributo.
49      \return El iterador al final de la lista de valores asociados a este atributo.
50   */
51   const_value_iterator value_end() const { return a_values.end(); }
52
53   /**
54      Devuelve el valor asociado al iterador recibido como parametro.
55      \param ii Instancia del iterador usado para recorrer los datos. Estara comprendido
56      entre [#value_begin, #value_end).
57      \return El valor referenciado por el iterador.
58   */
59   static const std::string& value(const_value_iterator ii) { return *value_container::data(ii); }
60
61 private:
62   std::string a_name;
63   value_container a_values;
64
65   Attribute() {;}
66
67   void setName(const std::string& name) { a_name = name; }
68
69   void add(const std::string& value) noexcept(false) {
70     std::string* newValue = a_values.create();
71     *newValue = value;
72   }
73   void clear() { a_name.clear(); a_values.clear(); }
74
75   friend class Session;
76   friend class Response;
77   friend class Allocator<Attribute>;
78 };
79
80 }
81 }
82
83 #endif
84