1 /* vim: set et sts=4 sw=4 fdm=indent fdl=1 fdn=1 fo+=t tw=80:
3 * Taller de Programación (75.42).
8 * Copyleft 2003 - Leandro Lucarella <llucare@fi.uba.ar>
9 * Puede copiar, modificar y distribuir este programa bajo los términos de
10 * la licencia GPL (http://www.gnu.org/).
12 * Creado: Wed Sep 17 21:07:54 ART 2003
22 /// Nodo de la lista doblemente enlazada.
25 /// Puntero al nodo anterior.
28 /// Datos almacenados en el nodo.
31 /// Puntero al próximo nodo.
35 DLListNode(DLListNode* prev = NULL, void* data = NULL,
36 DLListNode* next = NULL): prev(prev), data(data), next(next) {}
40 /// Lista doblemente enlazada.
45 /// Puntero al primer nodo.
48 /// Puntero al nodo actual.
51 /// Puntero al último nodo.
56 /// Crea una nueva lista.
59 /// Libera la memoria ocupada por una lista.
60 virtual ~DLList(void);
63 * Indica si está vacía.
65 * \return true si está vacía, false si no.
70 * Apunta al primer elemento, devolviendolo.
71 * Hace que el elemento actual sea el primero y devuelve su valor.
72 * Si está vacía, devuelve NULL.
73 * Siempre que se quiera recorrer la lista de izquierda a derecha
74 * debería usarse esta función primero. Por ejemplo:
79 * for (data = list.begin(); list.have_more(); data = list.next()) {
80 * printf("El elemento actual es '%s'.\\n", data);
84 * \return Primer elemento o NULL si está vacía.
85 * \see have_more(), next(), end(), prev()
90 * Apunta al último elemento, devolviendolo.
91 * Hace que el elemento actual sea el último y devuelve su valor.
92 * Si está vacía, devuelve NULL.
93 * Siempre que se quiera recorrer la lista de derecha a izquierda
94 * debería usarse esta función primero. Por ejemplo:
99 * for (data = list.end(); list.have_more(); data = list.prev()) {
100 * printf("El elemento actual es '%s'.\\n", data);
104 * \return Último elemento o NULL si está vacía.
105 * \see DLList_have_more(), DLList_prev(), DLList_begin(), DLList_next()
106 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
111 * Indica si se puede obtener otro elemento de la lista.
113 * \return true si se puede obtener otro elemento, false si no.
114 * \see begin(), end(), prev(), next()
116 bool have_more(void);
119 * Obtiene el elemento actual.
121 * \return Elemento actual o NULL si se terminó de recorrer o está vacía.
122 * \see prev(), next(), have_more()
127 * Obtiene el próximo elemento.
129 * \return Siguiente elemento o NULL si es el último.
130 * \see begin(), have_more(), current(), prev()
135 * Obtiene el elemento anterior.
137 * \return Elemento anterior o NULL si es el primero.
138 * \see begin(), have_more(), current(), next()
143 * Agrega un elemento al inicio.
145 * \param data Elemento a agregar.
147 * \return true si se agregó, false si no hay más memoria.
148 * \see push(), pop(), unshift()
150 bool unshift(void* data);
153 * Agrega un elemento al final.
155 * \param data Elemento a agregar.
157 * \return true si se agregó, false si no hay más memoria.
158 * \see pop(), shift(), unshift()
160 bool push(void* data);
163 * Saca el primer elemento.
164 * Elimina el primer elemento devolviendo su contenido.
170 * while (!list.empty()) {
171 * data = list.shift();
172 * printf("El elemento actual es '%s'.\\n", data);
176 * \return Primer elemento o NULL si está vacía.
177 * \see empty(), pop(), remove_current()
178 * \warning Es necesario comprobar antes si está vacía, ya que puede
179 * devolver NULL también si el elemento de la lista es NULL.
184 * Saca el último elemento.
185 * Elimina el último elemento devolviendo su contenido.
191 * while (!list.empty()) {
193 * printf("El elemento actual es '%s'.\\n", data);
197 * \return Último elemento o NULL si está vacía.
198 * \see empty(), shift(), remove_current()
199 * \warning Es necesario comprobar antes si está vacía, ya que puede
200 * devolver NULL también si el elemento de la lista es NULL.
205 * Elimina el elemento actual.
206 * Elimina el elemento actual devolviendo su contenido.
208 * \return Elemento actual o NULL si no hay más elementos.
209 * \see empty(), current(), have_more()
210 * \warning Es necesario comprobar antes si está vacía, ya que puede
211 * devolver NULL también si el elemento de la lista es NULL.
213 void* remove_current(void);
217 #endif /* DLLIST_H */