1// $OpenLDAP$
2/*
3 * Copyright 2000-2011 The OpenLDAP Foundation, All Rights Reserved.
4 * COPYING RESTRICTIONS APPLY, see COPYRIGHT file
5 */
6
7#ifndef LDAP_CONTROL_SET_H
8#define LDAP_CONTROL_SET_H
9
10#include <list>
11#include <ldap.h>
12#include <LDAPControl.h>
13
14typedef std::list<LDAPCtrl> CtrlList;
15
16/**
17 * This container class is used to store multiple LDAPCtrl-objects.
18 */
19class LDAPControlSet {
20    typedef CtrlList::const_iterator const_iterator;
21    public :
22        /**
23         * Constructs an empty std::list
24         */
25        LDAPControlSet();
26
27
28        /**
29         * Copy-constructor
30         */
31        LDAPControlSet(const LDAPControlSet& cs);
32
33        /**
34         * For internal use only
35         *
36         * This constructor creates a new LDAPControlSet for a
37         * 0-terminiated array of LDAPControl-structures as used by the
38         * C-API
39         * @param controls: pointer to a 0-terminated array of pointers to
40         *                  LDAPControll-structures
41         * @note: untested til now. Due to lack of server that return
42         *          Controls
43         */
44        LDAPControlSet(LDAPControl** controls);
45
46        /**
47         * Destructor
48         */
49        ~LDAPControlSet();
50
51        /**
52         * @return The number of LDAPCtrl-objects that are currently
53         * stored in this list.
54         */
55        size_t size() const ;
56
57        /**
58         * @return true if there are zero LDAPCtrl-objects currently
59         * stored in this list.
60         */
61        bool empty() const;
62
63        /**
64         * @return A iterator that points to the first element of the list.
65         */
66        const_iterator begin() const;
67
68        /**
69         * @return A iterator that points to the element after the last
70         * element of the list.
71         */
72        const_iterator end() const;
73
74        /**
75         * Adds one element to the end of the list.
76         * @param ctrl The Control to add to the list.
77         */
78        void add(const LDAPCtrl& ctrl);
79
80        /**
81         * Translates the list to a 0-terminated array of pointers to
82         * LDAPControl-structures as needed by the C-API
83         */
84        LDAPControl** toLDAPControlArray()const ;
85	static void freeLDAPControlArray(LDAPControl **ctrl);
86    private :
87        CtrlList data;
88} ;
89#endif //LDAP_CONTROL_SET_H
90