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
20 /** Tipo de dato booleano. */
23 TRUE /**< Verdadero. */
26 /** Nodo de la lista doblemente enlazada. */
27 typedef struct DLNodeStruct DLNode;
29 /** Nodo de la lista doblemente enlazada. */
31 /** Puntero al nodo anterior. */
33 /** Datos almacenados en el nodo. */
35 /** Puntero al próximo nodo. */
40 * Lista doblemente enlazada.
42 * \see DLList_new(), DLList_delete(), DLList_empty(), DLList_begin(),
43 * DLList_end(), DLList_have_more(), DLList_current(), DLList_next(),
44 * DLList_prev(), DLList_unshift(), DLList_push(), DLList_shift(),
48 /** Puntero al primer nodo. */
50 /** Puntero al nodo actual. */
52 /** Puntero al último nodo. */
57 * Crea una nueva lista.
59 * \return Puntero a la nueva DLList o NULL si no hay más memoria.
61 DLList* DLList_new(void);
64 * Libera la memoria ocupada por una lista.
66 * \param list DLList a liberar.
68 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
70 void DLList_delete(DLList* list);
73 * Indica si la DLList está vacía.
75 * \param list DLList a verificar.
77 * \return \ref TRUE si está vacía, \ref FALSE si no.
78 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
80 bool DLList_empty(DLList* list);
83 * Apunta al primer elemento de la DLList devolviendolo.
84 * Hace que el elemento actual de la DLList sea el primero y devuelve su valor.
85 * Si está vacía, devuelve NULL.
86 * Siempre que se quiera recorrer la DLList de izquierda a derecha debería
87 * usarse esta función primero. Por ejemplo:
92 * for (data = DLList_begin(l); DLList_have_more(l); data = DLList_next(l)) {
93 * printf("El elemento actual es '%s'.\\n", data);
97 * \param list DLList de la cual obtener el primer elemento.
99 * \return Primer elemento o NULL si está vacía.
100 * \see DLList_have_more(), DLList_next(), DLList_end(), DLList_prev()
101 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
103 void* DLList_begin(DLList* list);
106 * Apunta al último elemento de la DLList devolviendolo.
107 * Hace que el elemento actual de la DLList sea el último y devuelve su valor.
108 * Si está vacía, devuelve NULL.
109 * Siempre que se quiera recorrer la DLList de derecha a izquierda debería
110 * usarse esta función primero. Por ejemplo:
115 * for (data = DLList_end(l); DLList_have_more(l); data = DLList_prev(l)) {
116 * printf("El elemento actual es '%s'.\\n", data);
120 * \param list DLList de la cual obtener el último elemento.
122 * \return Último elemento o NULL si está vacía.
123 * \see DLList_have_more(), DLList_prev(), DLList_begin(), DLList_next()
124 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
126 void* DLList_end(DLList* list);
129 * Indica si se puede obtener otro elemento de la lista en una iteración.
131 * \param list DLList a verificar.
133 * \return \ref TRUE si se puede obtener otro elemento, \ref FALSE si no.
134 * \see DLList_begin(), DLList_end(), DLList_prev(), DLList_next()
135 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
137 bool DLList_have_more(DLList* list);
140 * Obtiene el elemento actual de la DLList.
142 * \param list DLList de la cual obtener el elemento actual.
144 * \return Elemento actual o NULL si se terminó de recorrer o está vacía.
145 * \see DLList_prev(), DLList_next(), DLList_have_more()
146 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
148 void* DLList_current(DLList* list);
151 * Obtiene el próximo elemento de la DLList.
153 * \param list DLList de la cual obtener el siguiente elemento.
155 * \return Siguiente elemento o NULL si es el último.
156 * \see DLList_begin(), DLList_have_more(), DLList_current(), DLList_prev()
157 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
159 void* DLList_next(DLList* list);
162 * Obtiene el elemento anterior de la DLList.
164 * \param list DLList de la cual obtener el elemento anterior.
166 * \return Elemento anterior o NULL si es el primero.
167 * \see DLList_begin(), DLList_have_more(), DLList_current(), DLList_next()
168 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
170 void* DLList_prev(DLList* list);
173 * Agrega un elemento al inicio de la DLList.
175 * \param list DLList a la cual agregar el elemento.
176 * \param data Elemento a agregar.
178 * \return \ref TRUE si se agregó, \ref FALSE si no hay más memoria.
179 * \see DLList_push(), DLList_pop(), DLList_unshift()
180 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
181 * \post El puntero interno de la DLList apunta al nuevo elemento.
183 bool DLList_unshift(DLList* list, void* data);
186 * Agrega un elemento al final de la DLList.
188 * \param list DLList a la cual agregar el elemento.
189 * \param data Elemento a agregar.
191 * \return \ref TRUE si se agregó, \ref FALSE si no hay más memoria.
192 * \see DLList_pop(), DLList_shift(), DLList_unshift()
193 * \pre La DLList debe estar \ref DLList_new "creada" correctamente.
194 * \post El puntero interno de la DLList apunta al nuevo elemento.
196 bool DLList_push(DLList* list, void* data);
199 * Saca el primer elemento de la DLList.
200 * Elimina el primer elemento de la DLList devolviendo su contenido.
206 * while (!DLList_empty(l)) {
207 * data = DLList_shift(l);
208 * printf("El elemento actual es '%s'.\\n", data);
212 * \param list DLList de la cual sacar el elemento.
214 * \return Primer elemento de la DLList.
215 * \see DLList_empty(), DLList_pop()
216 * \pre La DLList debe estar \ref DLList_new "creada" correctamente y no
217 * debe estar \ref DLList_empty "vacía".
218 * \post El puntero interno de la DLList apunta primer elemento.
220 void* DLList_shift(DLList* list);
223 * Saca el último elemento de la DLList.
224 * Elimina el último elemento de la DLList devolviendo su contenido.
230 * while (!DLList_empty(l)) {
231 * data = DLList_pop(l);
232 * printf("El elemento actual es '%s'.\\n", data);
236 * \param list DLList de la cual sacar el elemento.
238 * \return Último elemento de la DLList.
239 * \see DLList_empty(), DLList_shift()
240 * \pre La DLList debe estar \ref DLList_new "creada" correctamente y no
241 * debe estar \ref DLList_empty "vacía".
242 * \post El puntero interno de la DLList apunta último elemento.
244 void* DLList_pop(DLList* list);
247 * Elimina el elemento actual de la DLList.
248 * Elimina el elemento actual de la DLList devolviendo su contenido.
250 * \param list DLList de la cual sacar el elemento.
252 * \return Elemento actual de la DLList o NULL si no hay más elementos.
253 * \see DLList_empty(), DLList_current(), DLList_have_more()
254 * \pre La DLList debe estar \ref DLList_new "creada" correctamente y
255 * debe \ref DLList_have_more "tener un elemento actual" (por lo que
256 * también debe estar no \ref DLList_empty "vacía").
257 * \post El puntero interno de la DLList apunta al próximo elemento.
259 void* DLList_remove_current(DLList* list);
261 #endif /* DLLIST_H */