X-Git-Url: https://git.llucax.com/z.facultad/75.42/calculadora.git/blobdiff_plain/9bd9e775760d72533fcf53dde53f5f6c8f634895..0030baf01844749eb88b276c6e8ce417cdd6914d:/dllist.h?ds=sidebyside diff --git a/dllist.h b/dllist.h index 4a44446..674fbc3 100644 --- a/dllist.h +++ b/dllist.h @@ -17,12 +17,7 @@ #ifndef DLLIST_H #define DLLIST_H - -/** Tipo de dato booleano. */ -typedef enum { - FALSE, /**< Falso. */ - TRUE /**< Verdadero. */ -} bool; +#include "bool.h" /** Nodo de la lista doblemente enlazada. */ typedef struct DLNodeStruct DLNode; @@ -40,9 +35,10 @@ struct DLNodeStruct { /** * Lista doblemente enlazada. * - * \see DLList_init(), DLList_empty(), DLList_begin(), DLList_end(), - * DLList_have_more(), DLList_current(), DLList_next(), DLList_prev(), - * DLList_unshift(), DLList_push(), DLList_shift(), DLList_pop() + * \see DLList_new(), DLList_delete(), DLList_empty(), DLList_begin(), + * DLList_end(), DLList_have_more(), DLList_current(), DLList_next(), + * DLList_prev(), DLList_unshift(), DLList_push(), DLList_shift(), + * DLList_pop() */ typedef struct { /** Puntero al primer nodo. */ @@ -54,13 +50,20 @@ typedef struct { } DLList; /** - * Inicializa la DLList. + * Crea una nueva lista. + * + * \return Puntero a la nueva DLList o NULL si no hay más memoria. + */ +DLList* DLList_new(void); + +/** + * Libera la memoria ocupada por una lista. * - * \param list DLList a inicializar. + * \param list DLList a liberar. * - * \return \ref TRUE si se inicializó bien, \ref FALSE si hay error. + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. */ -bool DLList_init(DLList* list); +void DLList_delete(DLList* list); /** * Indica si la DLList está vacía. @@ -68,7 +71,7 @@ bool DLList_init(DLList* list); * \param list DLList a verificar. * * \return \ref TRUE si está vacía, \ref FALSE si no. - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. */ bool DLList_empty(DLList* list); @@ -91,7 +94,7 @@ bool DLList_empty(DLList* list); * * \return Primer elemento o NULL si está vacía. * \see DLList_have_more(), DLList_next(), DLList_end(), DLList_prev() - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. */ void* DLList_begin(DLList* list); @@ -114,7 +117,7 @@ void* DLList_begin(DLList* list); * * \return Último elemento o NULL si está vacía. * \see DLList_have_more(), DLList_prev(), DLList_begin(), DLList_next() - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. */ void* DLList_end(DLList* list); @@ -125,7 +128,7 @@ void* DLList_end(DLList* list); * * \return \ref TRUE si se puede obtener otro elemento, \ref FALSE si no. * \see DLList_begin(), DLList_end(), DLList_prev(), DLList_next() - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. */ bool DLList_have_more(DLList* list); @@ -136,7 +139,7 @@ bool DLList_have_more(DLList* list); * * \return Elemento actual o NULL si se terminó de recorrer o está vacía. * \see DLList_prev(), DLList_next(), DLList_have_more() - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. */ void* DLList_current(DLList* list); @@ -147,7 +150,7 @@ void* DLList_current(DLList* list); * * \return Siguiente elemento o NULL si es el último. * \see DLList_begin(), DLList_have_more(), DLList_current(), DLList_prev() - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. */ void* DLList_next(DLList* list); @@ -158,7 +161,7 @@ void* DLList_next(DLList* list); * * \return Elemento anterior o NULL si es el primero. * \see DLList_begin(), DLList_have_more(), DLList_current(), DLList_next() - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. */ void* DLList_prev(DLList* list); @@ -170,7 +173,7 @@ void* DLList_prev(DLList* list); * * \return \ref TRUE si se agregó, \ref FALSE si no hay más memoria. * \see DLList_push(), DLList_pop(), DLList_unshift() - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. * \post El puntero interno de la DLList apunta al nuevo elemento. */ bool DLList_unshift(DLList* list, void* data); @@ -183,7 +186,7 @@ bool DLList_unshift(DLList* list, void* data); * * \return \ref TRUE si se agregó, \ref FALSE si no hay más memoria. * \see DLList_pop(), DLList_shift(), DLList_unshift() - * \pre La DLList debe estar \ref DLList_init "inicializada". + * \pre La DLList debe estar \ref DLList_new "creada" correctamente. * \post El puntero interno de la DLList apunta al nuevo elemento. */ bool DLList_push(DLList* list, void* data); @@ -206,8 +209,8 @@ bool DLList_push(DLList* list, void* data); * * \return Primer elemento de la DLList. * \see DLList_empty(), DLList_pop() - * \pre La DLList debe estar \ref DLList_init "inicializada" y no - * \ref DLList_empty "vacía. + * \pre La DLList debe estar \ref DLList_new "creada" correctamente y no + * debe estar \ref DLList_empty "vacía". * \post El puntero interno de la DLList apunta primer elemento. */ void* DLList_shift(DLList* list); @@ -230,10 +233,25 @@ void* DLList_shift(DLList* list); * * \return Último elemento de la DLList. * \see DLList_empty(), DLList_shift() - * \pre La DLList debe estar \ref DLList_init "inicializada" y no - * \ref DLList_empty "vacía. + * \pre La DLList debe estar \ref DLList_new "creada" correctamente y no + * debe estar \ref DLList_empty "vacía". * \post El puntero interno de la DLList apunta último elemento. */ void* DLList_pop(DLList* list); +/** + * Elimina el elemento actual de la DLList. + * Elimina el elemento actual de la DLList devolviendo su contenido. + * + * \param list DLList de la cual sacar el elemento. + * + * \return Elemento actual de la DLList o NULL si no hay más elementos. + * \see DLList_empty(), DLList_current(), DLList_have_more() + * \pre La DLList debe estar \ref DLList_new "creada" correctamente y + * debe \ref DLList_have_more "tener un elemento actual" (por lo que + * también debe estar no \ref DLList_empty "vacía"). + * \post El puntero interno de la DLList apunta al próximo elemento. + */ +void* DLList_remove_current(DLList* list); + #endif /* DLLIST_H */