Commons Library  1.7.0
list.h
Ir a la documentación de este archivo.
1 /*
2  * Copyright (C) 2012 Sistemas Operativos - UTN FRBA. All rights reserved.
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  */
16 
17 #ifndef LIST_H_
18 #define LIST_H_
19 
20  #include "node.h"
21  #include <stdbool.h>
22 
32  typedef struct {
33  t_link_element *head;
35  } t_list;
36 
41  typedef struct {
43  t_link_element **actual;
44  t_link_element **next;
45  int index;
47 
64 
88  int list_add(t_list* self, void *element);
89 
111  void list_destroy(t_list* self);
112 
135  void list_destroy_and_destroy_elements(t_list* self, void(*element_destroyer)(void*));
136 
155  void list_add_in_index(t_list* self, int index, void *element);
156 
183  int list_add_sorted(t_list *self, void* data, bool (*comparator)(void*,void*));
184 
207  void list_add_all(t_list* self, t_list* other);
208 
228  void *list_get(t_list* self, int index);
229 
256  void *list_get_minimum(t_list* self, void* (*minimum)(void*, void*));
257 
284  void *list_get_maximum(t_list* self, void* (*maximum)(void*, void*));
285 
305  t_list* list_take(t_list* self, int count);
306 
328  t_list* list_slice(t_list* self, int start, int count);
329 
350  t_list* list_take_and_remove(t_list* self, int count);
351 
373  t_list* list_slice_and_remove(t_list* self, int start, int count);
374 
396  t_list* list_filter(t_list* self, bool(*condition)(void*));
397 
420  t_list* list_map(t_list* self, void*(*transformer)(void*));
421 
448 
473  void *list_replace(t_list* self, int index, void* element);
474 
505  void *list_replace_by_condition(t_list* self, bool(*condition)(void*), void* element);
506 
529  void list_replace_and_destroy_element(t_list* self, int index, void* element, void(*element_destroyer)(void*));
530 
551  void *list_remove(t_list* self, int index);
552 
576  bool list_remove_element(t_list* self, void* element);
577 
596  void list_remove_and_destroy_element(t_list* self, int index, void(*element_destroyer)(void*));
597 
621  void *list_remove_by_condition(t_list* self, bool(*condition)(void*));
622 
644  void list_remove_and_destroy_by_condition(t_list* self, bool(*condition)(void*), void(*element_destroyer)(void*));
645 
667  void list_remove_and_destroy_all_by_condition(t_list *self, bool(*condition)(void*), void(*element_destroyer)(void*));
668 
691  void list_clean(t_list* self);
692 
710  void list_clean_and_destroy_elements(t_list *self, void(*element_destroyer)(void*));
711 
735  void list_iterate(t_list* self, void(*closure)(void*));
736 
766  void *list_find(t_list* self, bool(*closure)(void*));
767 
784  int list_size(t_list* self);
785 
798  bool list_is_empty(t_list* self);
799 
823  void list_sort(t_list* self, bool (*comparator)(void *, void *));
824 
851  t_list* list_sorted(t_list* self, bool (*comparator)(void *, void *));
852 
874  int list_count_satisfying(t_list* self, bool(*condition)(void*));
875 
903  bool list_any_satisfy(t_list* self, bool(*condition)(void*));
904 
932  bool list_all_satisfy(t_list* self, bool(*condition)(void*));
933 
952 
984  void* list_fold(t_list* self, void* seed, void*(*operation)(void*, void*));
985 
1012  void* list_fold1(t_list* self, void* (*operation)(void*, void*));
1013 
1034 
1039 
1048 
1053 
1060  void list_iterator_add(t_list_iterator* iterator, void *data);
1061 
1069 
1075 
1076 #endif /*LIST_H_*/
void * list_get(t_list *self, int index)
Retorna el contenido de una posicion determinada de la lista.
t_list_iterator * list_iterator_create(t_list *list)
Inicializa una iteración externa de la lista. Permite recorrer la lista y modificarla al mismo tiempo...
int list_count_satisfying(t_list *self, bool(*condition)(void *))
Cuenta la cantidad de elementos de la lista que devuelven true al aplicarles la condición.
t_list * list_take(t_list *self, int count)
Retorna una nueva lista con los primeros n elementos.
int list_add(t_list *self, void *element)
Agrega un elemento al final de la lista.
int list_size(t_list *self)
Retorna el tamaño de la lista.
bool list_is_empty(t_list *self)
Verifica si la lista esta vacia.
bool list_remove_element(t_list *self, void *element)
Remueve al elemento de la lista recibido por parámetro.
void list_add_all(t_list *self, t_list *other)
Agrega todos los elementos de la segunda lista al final de la primera.
void * list_replace(t_list *self, int index, void *element)
Coloca un elemento en una de la posiciones de la lista retornando el valor anterior.
t_list * list_duplicate(t_list *self)
Crea una lista nueva con los mismos elementos que la original.
t_list * list_slice_and_remove(t_list *self, int start, int count)
Retorna una nueva lista con los primeros n elementos partiendo desde el índice indicado,...
void * list_get_maximum(t_list *self, void *(*maximum)(void *, void *))
Retorna el maximo de la lista según el comparador.
void * list_remove(t_list *self, int index)
Remueve un elemento de la lista de una determinada posicion y lo retorna.
void list_remove_and_destroy_element(t_list *self, int index, void(*element_destroyer)(void *))
Remueve un elemento de la lista de una determinada posicion y libera la memoria.
void list_replace_and_destroy_element(t_list *self, int index, void *element, void(*element_destroyer)(void *))
Coloca un valor en una de la posiciones de la lista liberando el valor anterior.
void list_iterate(t_list *self, void(*closure)(void *))
Itera la lista llamando al closure por cada elemento. En caso de querer modificar la lista durante la...
bool list_iterator_has_next(t_list_iterator *iterator)
Devuelve true si quedan elementos de la lista por recorrer.
t_list * list_filter(t_list *self, bool(*condition)(void *))
Retorna una nueva lista con los elementos que cumplen la condicion.
void * list_iterator_next(t_list_iterator *iterator)
Avanza hacia el siguiente elemento a iterar de la lista y lo devuelve.
void list_remove_and_destroy_by_condition(t_list *self, bool(*condition)(void *), void(*element_destroyer)(void *))
Remueve y libera el primer elemento de la lista que haga que condition devuelva true.
t_list * list_slice(t_list *self, int start, int count)
Retorna una nueva lista con los primeros n elementos partiendo desde el índice indicado.
t_list * list_create(void)
Crea una lista.
void * list_find(t_list *self, bool(*closure)(void *))
Retorna el primer valor encontrado, el cual haga que condition devuelva true, o NULL en caso de no en...
int list_iterator_index(t_list_iterator *iterator)
Devuelve el índice del elemento actual de la iteración.
void list_destroy_and_destroy_elements(t_list *self, void(*element_destroyer)(void *))
Destruye una lista y sus elementos contenidos llamando a la función element_destroyer sobre cada uno ...
void list_clean(t_list *self)
Quita todos los elementos de la lista, sin liberarlos.
int list_add_sorted(t_list *self, void *data, bool(*comparator)(void *, void *))
Agrega un elemento a una lista ordenada, manteniendo el orden definido por el comparador.
t_list * list_sorted(t_list *self, bool(*comparator)(void *, void *))
Retorna una lista nueva ordenada segun el comparador.
void list_iterator_remove(t_list_iterator *iterator)
Remueve de la lista al elemento actual de la iteración.
t_list * list_map(t_list *self, void *(*transformer)(void *))
Retorna una nueva lista con los elementos transformados.
bool list_all_satisfy(t_list *self, bool(*condition)(void *))
Determina si todos los elementos de la lista devuelven true al aplicarles la condición.
void * list_replace_by_condition(t_list *self, bool(*condition)(void *), void *element)
Coloca un elemento en la posición de la lista que cumpla con la condición, retornando el valor anteri...
void list_iterator_destroy(t_list_iterator *iterator)
Finaliza la instancia de iteración externa liberando sus recursos.
t_list * list_flatten(t_list *self)
Retorna una nueva lista con los elementos de la lista de listas recibida.
void * list_remove_by_condition(t_list *self, bool(*condition)(void *))
Remueve el primer elemento de la lista que haga que condition devuelva true.
void list_clean_and_destroy_elements(t_list *self, void(*element_destroyer)(void *))
Quita todos los elementos de la lista y los libera llamando a la función element_destroyer sobre cada...
void list_destroy(t_list *self)
Destruye una lista sin liberar los elementos contenidos en los nodos.
void list_remove_and_destroy_all_by_condition(t_list *self, bool(*condition)(void *), void(*element_destroyer)(void *))
Remueve y destruye todos los elementos de la lista que hagan que condition devuelva true.
void list_add_in_index(t_list *self, int index, void *element)
Agrega un elemento en una posicion determinada de la lista.
bool list_any_satisfy(t_list *self, bool(*condition)(void *))
Determina si algún elemento de la lista devuelve true al aplicarle la condición.
void * list_fold(t_list *self, void *seed, void *(*operation)(void *, void *))
Devuelve un valor que resulta de aplicar la operacion entre todos los elementos de la lista,...
void * list_get_minimum(t_list *self, void *(*minimum)(void *, void *))
Retorna el minimo de la lista según el comparador.
t_list * list_take_and_remove(t_list *self, int count)
Retorna una nueva lista con los primeros n elementos, eliminando del origen estos elementos.
void list_sort(t_list *self, bool(*comparator)(void *, void *))
Ordena la lista segun el comparador.
void * list_fold1(t_list *self, void *(*operation)(void *, void *))
Devuelve un valor que resulta de aplicar la operacion entre todos los elementos de la lista,...
void list_iterator_add(t_list_iterator *iterator, void *data)
Agrega a la lista un elemento delante del actual y detrás del siguiente. Luego, avanza hacia el eleme...
Iterador de listas. Inicializar con list_iterator_create()
Definition: list.h:41
t_list * list
Definition: list.h:42
t_link_element ** next
Definition: list.h:44
t_link_element ** actual
Definition: list.h:43
int index
Definition: list.h:45
Estructura de una lista enlazada. Inicializar con list_create()
Definition: list.h:32
t_link_element * head
Definition: list.h:33
int elements_count
Definition: list.h:34