xref: /netbsd-src/external/bsd/openldap/dist/contrib/ldapc++/src/LDAPAttributeList.h (revision 549b59ed3ccf0d36d3097190a0db27b770f3a839)
1 /*	$NetBSD: LDAPAttributeList.h,v 1.3 2021/08/14 16:14:49 christos Exp $	*/
2 
3 // $OpenLDAP$
4 /*
5  * Copyright 2000-2021 The OpenLDAP Foundation, All Rights Reserved.
6  * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
7  */
8 
9 
10 #ifndef LDAP_ATTRIBUTE_LIST_H
11 #define LDAP_ATTRIBUTE_LIST_H
12 
13 #include <ldap.h>
14 #include <list>
15 #include <string>
16 
17 class LDAPAttribute;
18 class LDAPAsynConnection;
19 class LDAPMsg;
20 
21 /**
22  * This container class is used to store multiple LDAPAttribute-objects.
23  */
24 class LDAPAttributeList{
25     typedef std::list<LDAPAttribute> ListType;
26 
27     private :
28         ListType m_attrs;
29 
30     public :
31         typedef ListType::const_iterator const_iterator;
32 	typedef ListType::iterator iterator;
33 
34 
35         /**
36          * Copy-constructor
37          */
38         LDAPAttributeList(const LDAPAttributeList& al);
39 
40         /**
41          * For internal use only
42          *
43          * This constructor is used by the library internally to create a
44          * list of attributes from a LDAPMessage-struct that was return by
45          * the C-API
46          */
47         LDAPAttributeList(const LDAPAsynConnection *ld, LDAPMessage *msg);
48 
49         /**
50          * Constructs an empty list.
51          */
52         LDAPAttributeList();
53 
54         /**
55          * Destructor
56          */
57         virtual ~LDAPAttributeList();
58 
59         /**
60          * @return The number of LDAPAttribute-objects that are currently
61          * stored in this list.
62          */
63         size_t size() const;
64 
65         /**
66          * @return true if there are zero LDAPAttribute-objects currently
67          * stored in this list.
68          */
69         bool empty() const;
70 
71         /**
72          * @return A iterator that points to the first element of the list.
73          */
74         const_iterator begin() const;
75 
76         /**
77          * @return A iterator that points to the element after the last
78          * element of the list.
79          */
80         const_iterator end() const;
81 
82 	/**
83 	 * Get an Attribute by its AttributeType
84 	 * @param name The name of the Attribute to look for
85 	 * @return a pointer to the LDAPAttribute with the AttributeType
86 	 *	"name" or 0, if there is no Attribute of that Type
87 	 */
88 	const LDAPAttribute* getAttributeByName(const std::string& name) const;
89 
90         /**
91          * Adds one element to the end of the list.
92          * @param attr The attribute to add to the list.
93          */
94         void addAttribute(const LDAPAttribute& attr);
95 
96         /**
97          * Deletes all values of an Attribute for the list
98          * @param type The attribute type to be deleted.
99          */
100         void delAttribute(const std::string& type);
101 
102         /**
103          * Replace an Attribute in the List
104          * @param attr The attribute to add to the list.
105          */
106         void replaceAttribute(const LDAPAttribute& attr);
107 
108         /**
109          * Translates the list of Attributes to a 0-terminated array of
110          * LDAPMod-structures as needed by the C-API
111          */
112         LDAPMod** toLDAPModArray() const;
113 
114         /**
115          * This method can be used to dump the data of a LDAPResult-Object.
116          * It is only useful for debugging purposes at the moment
117          */
118         friend std::ostream& operator << (std::ostream& s,
119 					  const LDAPAttributeList& al);
120 };
121 
122 #endif // LDAP_ATTRIBUTE_LIST_H
123 
124