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).
6 * Programa calculadora.
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: sáb ago 30 19:59:12 ART 2003
21 /** Tipo de dato booleano. */
24 TRUE /**< Verdadero. */
27 /** Nodo de la lista doblemente enlazada. */
28 typedef struct DLNodeStruct DLNode;
30 /** Nodo de la lista doblemente enlazada. */
32 /** Puntero al nodo anterior. */
34 /** Datos almacenados en el nodo. */
36 /** Puntero al próximo nodo. */
41 * Lista doblemente enlazada.
43 * \see DLList_new(), DLList_delete(), DLList_empty(), DLList_begin(),
44 * DLList_end(), DLList_have_more(), DLList_current(), DLList_next(),
45 * DLList_prev(), DLList_unshift(), DLList_push(), DLList_shift(),
49 /** Puntero al primer nodo. */
51 /** Puntero al nodo actual. */
53 /** Puntero al último nodo. */
58 * Crea una nueva lista.
60 * \return Puntero a la nueva DLList o NULL si no hay más memoria.
62 DLList* DLList_new(void);
65 * Libera la memoria ocupada por una lista.
67 * \param list DLList a liberar.
69 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
71 void DLList_delete(DLList* list);
74 * Indica si la DLList está vacía.
76 * \param list DLList a verificar.
78 * \return \ref TRUE si está vacía, \ref FALSE si no.
79 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
81 bool DLList_empty(DLList* list);
84 * Apunta al primer elemento de la DLList devolviendolo.
85 * Hace que el elemento actual de la DLList sea el primero y devuelve su valor.
86 * Si está vacía, devuelve NULL.
87 * Siempre que se quiera recorrer la DLList de izquierda a derecha debería
88 * usarse esta función primero. Por ejemplo:
93 * for (data = DLList_begin(l); DLList_have_more(l); data = DLList_next(l)) {
94 * printf("El elemento actual es '%s'.\\n", data);
98 * \param list DLList de la cual obtener el primer elemento.
100 * \return Primer elemento o NULL si está vacía.
101 * \see DLList_have_more(), DLList_next(), DLList_end(), DLList_prev()
102 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
104 void* DLList_begin(DLList* list);
107 * Apunta al último elemento de la DLList devolviendolo.
108 * Hace que el elemento actual de la DLList sea el último y devuelve su valor.
109 * Si está vacía, devuelve NULL.
110 * Siempre que se quiera recorrer la DLList de derecha a izquierda debería
111 * usarse esta función primero. Por ejemplo:
116 * for (data = DLList_end(l); DLList_have_more(l); data = DLList_prev(l)) {
117 * printf("El elemento actual es '%s'.\\n", data);
121 * \param list DLList de la cual obtener el último elemento.
123 * \return Último elemento o NULL si está vacía.
124 * \see DLList_have_more(), DLList_prev(), DLList_begin(), DLList_next()
125 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
127 void* DLList_end(DLList* list);
130 * Indica si se puede obtener otro elemento de la lista en una iteración.
132 * \param list DLList a verificar.
134 * \return \ref TRUE si se puede obtener otro elemento, \ref FALSE si no.
135 * \see DLList_begin(), DLList_end(), DLList_prev(), DLList_next()
136 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
138 bool DLList_have_more(DLList* list);
141 * Obtiene el elemento actual de la DLList.
143 * \param list DLList de la cual obtener el elemento actual.
145 * \return Elemento actual o NULL si se terminó de recorrer o está vacía.
146 * \see DLList_prev(), DLList_next(), DLList_have_more()
147 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
149 void* DLList_current(DLList* list);
152 * Obtiene el próximo elemento de la DLList.
154 * \param list DLList de la cual obtener el siguiente elemento.
156 * \return Siguiente elemento o NULL si es el último.
157 * \see DLList_begin(), DLList_have_more(), DLList_current(), DLList_prev()
158 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
160 void* DLList_next(DLList* list);
163 * Obtiene el elemento anterior de la DLList.
165 * \param list DLList de la cual obtener el elemento anterior.
167 * \return Elemento anterior o NULL si es el primero.
168 * \see DLList_begin(), DLList_have_more(), DLList_current(), DLList_next()
169 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
171 void* DLList_prev(DLList* list);
174 * Agrega un elemento al inicio de la DLList.
176 * \param list DLList a la cual agregar el elemento.
177 * \param data Elemento a agregar.
179 * \return \ref TRUE si se agregó, \ref FALSE si no hay más memoria.
180 * \see DLList_push(), DLList_pop(), DLList_unshift()
181 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
182 * \post El puntero interno de la DLList apunta al nuevo elemento.
184 bool DLList_unshift(DLList* list, void* data);
187 * Agrega un elemento al final de la DLList.
189 * \param list DLList a la cual agregar el elemento.
190 * \param data Elemento a agregar.
192 * \return \ref TRUE si se agregó, \ref FALSE si no hay más memoria.
193 * \see DLList_pop(), DLList_shift(), DLList_unshift()
194 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
195 * \post El puntero interno de la DLList apunta al nuevo elemento.
197 bool DLList_push(DLList* list, void* data);
200 * Saca el primer elemento de la DLList.
201 * Elimina el primer elemento de la DLList devolviendo su contenido.
207 * while (!DLList_empty(l)) {
208 * data = DLList_shift(l);
209 * printf("El elemento actual es '%s'.\\n", data);
213 * \param list DLList de la cual sacar el elemento.
215 * \return Primer elemento de la DLList.
216 * \see DLList_empty(), DLList_pop()
217 * \pre La DLList debe estar \ref DLList_new "creada" correctamente y no
218 * debe estar \ref DLList_empty "vacía.
219 * \post El puntero interno de la DLList apunta primer elemento.
221 void* DLList_shift(DLList* list);
224 * Saca el último elemento de la DLList.
225 * Elimina el último elemento de la DLList devolviendo su contenido.
231 * while (!DLList_empty(l)) {
232 * data = DLList_pop(l);
233 * printf("El elemento actual es '%s'.\\n", data);
237 * \param list DLList de la cual sacar el elemento.
239 * \return Último elemento de la DLList.
240 * \see DLList_empty(), DLList_shift()
241 * \pre La DLList debe estar \ref DLList_new "creada" correctamente y no
242 * debe estar \ref DLList_empty "vacía.
243 * \post El puntero interno de la DLList apunta último elemento.
245 void* DLList_pop(DLList* list);
247 #endif /* DLLIST_H */