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
20 /** Nodo de la lista doblemente enlazada. */
22 /** Puntero al nodo anterior. */
24 /** Datos almacenados en el nodo. */
26 /** Puntero al próximo nodo. */
31 * Lista doblemente enlazada.
36 /** Puntero al primer nodo. */
38 /** Puntero al nodo actual. */
40 /** Puntero al último nodo. */
45 * Crea una nueva lista.
50 * Libera la memoria ocupada por una lista.
55 * Indica si está vacía.
57 * \return true si está vacía, false si no.
62 * Apunta al primer elemento, devolviendolo.
63 * Hace que el elemento actual sea el primero y devuelve su valor.
64 * Si está vacía, devuelve NULL.
65 * Siempre que se quiera recorrer la lista de izquierda a derecha
66 * debería usarse esta función primero. Por ejemplo:
71 * for (data = list.begin(); list.have_more(); data = list.next()) {
72 * printf("El elemento actual es '%s'.\\n", data);
76 * \return Primer elemento o NULL si está vacía.
77 * \see have_more(), next(), end(), prev()
82 * Apunta al último elemento, devolviendolo.
83 * Hace que el elemento actual sea el último y devuelve su valor.
84 * Si está vacía, devuelve NULL.
85 * Siempre que se quiera recorrer la lista de derecha a izquierda
86 * debería usarse esta función primero. Por ejemplo:
91 * for (data = list.end(); list.have_more(); data = list.prev()) {
92 * printf("El elemento actual es '%s'.\\n", data);
96 * \return Último elemento o NULL si está vacía.
97 * \see DLList_have_more(), DLList_prev(), DLList_begin(), DLList_next()
98 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
103 * Indica si se puede obtener otro elemento de la lista.
105 * \return true si se puede obtener otro elemento, false si no.
106 * \see begin(), end(), prev(), next()
108 bool have_more(void);
111 * Obtiene el elemento actual.
113 * \return Elemento actual o NULL si se terminó de recorrer o está vacía.
114 * \see prev(), next(), have_more()
119 * Obtiene el próximo elemento.
121 * \return Siguiente elemento o NULL si es el último.
122 * \see begin(), have_more(), current(), prev()
127 * Obtiene el elemento anterior.
129 * \return Elemento anterior o NULL si es el primero.
130 * \see begin(), have_more(), current(), next()
135 * Agrega un elemento al inicio.
137 * \param data Elemento a agregar.
139 * \return true si se agregó, false si no hay más memoria.
140 * \see push(), pop(), unshift()
142 bool unshift(void* data);
145 * Agrega un elemento al final.
147 * \param data Elemento a agregar.
149 * \return true si se agregó, false si no hay más memoria.
150 * \see pop(), shift(), unshift()
152 bool push(void* data);
155 * Saca el primer elemento.
156 * Elimina el primer elemento devolviendo su contenido.
162 * while (!list.empty()) {
163 * data = list.shift();
164 * printf("El elemento actual es '%s'.\\n", data);
168 * \return Primer elemento o NULL si está vacía.
169 * \see empty(), pop(), remove_current()
170 * \warning Es necesario comprobar antes si está vacía, ya que puede
171 * devolver NULL también si el elemento de la lista es NULL.
176 * Saca el último elemento.
177 * Elimina el último elemento devolviendo su contenido.
183 * while (!list.empty()) {
185 * printf("El elemento actual es '%s'.\\n", data);
189 * \return Último elemento o NULL si está vacía.
190 * \see empty(), shift(), remove_current()
191 * \warning Es necesario comprobar antes si está vacía, ya que puede
192 * devolver NULL también si el elemento de la lista es NULL.
197 * Elimina el elemento actual.
198 * Elimina el elemento actual devolviendo su contenido.
200 * \return Elemento actual o NULL si no hay más elementos.
201 * \see empty(), current(), have_more()
202 * \warning Es necesario comprobar antes si está vacía, ya que puede
203 * devolver NULL también si el elemento de la lista es NULL.
205 void* remove_current(void);
207 #endif /* DLLIST_H */