Árboles binarios de búsqueda (punteros)
Conjuntos de punteros. Para información general, consultar Árboles binarios de búsqueda.
Funciones
SetPt(type)* | setpt_create (...) |
void | setpt_destroy (...) |
uint32_t | setpt_size (...) |
type* | setpt_get (...) |
const type* | setpt_get_const (...) |
bool_t | setpt_insert (...) |
bool_t | setpt_delete (...) |
type* | setpt_first (...) |
const type* | setpt_first_const (...) |
type* | setpt_last (...) |
const type* | setpt_last_const (...) |
type* | setpt_next (...) |
const type* | setpt_next_const (...) |
type* | setpt_prev (...) |
const type* | setpt_prev_const (...) |
void | setpt_foreach (...) |
void | setpt_foreach_const (...) |
void | setpt_fornext (...) |
void | setpt_fornext_const (...) |
void | setpt_forback (...) |
void | setpt_forback_const (...) |
void | setpt_forprev (...) |
void | setpt_forprev_const (...) |
setpt_create ()
Crea un set de punteros vacío.
SetPt(type)* setpt_create(FPtr_compare func_compare, type);
func_compare | Función para comparar dos elementos. Ordenar y buscar. |
type | Tipo de objeto. |
Retorna
El nuevo set.
setpt_destroy ()
Destruye un set y todos sus elementos.
void setpt_destroy(SetPt(type) **set, FPtr_destroy func_destroy, type);
set | El set. Será puesto a |
func_destroy | Función para destruir un elemento del set Destructores. Si es |
type | Tipo de objeto. |
setpt_size ()
Obtiene el número de elementos del set.
uint32_t setpt_size(const SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Número de elementos.
setpt_get ()
Busca un elemento en O(logn)
. Es equivalente a arrpt_bsearch. El iterador interno de la estructura quedará fijado en él.
type* setpt_get(SetPt(type) *set, type *key, type);
1 2 3 4 |
Product key;
Product *pr;
key.id = 453;
pr = setpt_get(setpt, &key, Product);
|
set | El set. |
key | Clave a buscar. Es un puntero a un objeto donde solo los campos relevantes de la búsqueda deben ser inicializados. |
type | Tipo de objeto. |
Retorna
Puntero al elemento buscado si existe, o NULL
si no.
Observaciones
setpt_get_const ()
Versión const de setpt_get.
const type* setpt_get_const(const SetPt(type) *set, const type *key, type);
set | El set. |
key | Clave a buscar. |
type | Tipo de objeto. |
Retorna
Elemento.
setpt_insert ()
Inserta un nuevo elemento en el set.
bool_t setpt_insert(SetPt(type) *set, type *value, type);
1 2 3 4 5 6 |
Product *pr = product_create(...); if (setpt_insert(setpt, pr, Product) == FALSE) { error("Already exists"); product_destroy(&pr); } |
set | El set. |
value | Puntero al elemento a insertar. |
type | Tipo de objeto. |
Retorna
TRUE
si el elemento ha sido insertado. FALSE
si ya existe otro elemento con la misma clave.
Observaciones
Insertar o eliminar elementos invalida el iterador interno del set Iteradores. Debes volver a inicializarlo con setpt_first.
setpt_delete ()
Elimina un elemento del set.
bool_t setpt_delete(SetPt(type) *set, type *key, FPtr_destroy func_destroy, type);
1 2 3 4 |
Product key; key.id = 345; if (setpt_delete(setpt, &key, product_destroy, Product) == FALSE) error("Doesn't exists"); |
set | El set. |
key | Clave a eliminar. Es un puntero a un objeto donde solo los campos relevantes de la búsqueda deben ser inicializados. |
func_destroy | Destructor del elemento. Puede ser |
type | Tipo de objeto. |
Retorna
TRUE
si el elemento ha sido eliminado, o FALSE
si no existe un elemento con dicha clave.
Observaciones
Insertar o eliminar elementos invalida el iterador interno del set Iteradores. Debes inicializarlo con setpt_first.
setpt_first ()
Obtiene el primer elemento del set e inicializa el iterador interno.
type* setpt_first(SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Puntero al primer elemento o NULL
si el set está vacío.
Observaciones
setpt_first_const ()
Versión const de setpt_first.
const type* setpt_first_const(const SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Elemento.
setpt_last ()
Obtiene el último elemento del set e inicializa el iterador interno.
type* setpt_last(SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Puntero al último elemento o NULL
si el set está vacío.
Observaciones
setpt_last_const ()
Versión const de setpt_last.
const type* setpt_last_const(const SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Elemento.
setpt_next ()
Obtiene el siguiente elemento del set, tras incrementar el iterador interno.
type* setpt_next(SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Puntero al siguiente elemento o NULL
si el iterador ha alcanzado el último.
Observaciones
Utiliza setpt_first para inicializar el iterador interno Iteradores.
setpt_next_const ()
Versión const de setpt_next.
const type* setpt_next_const(const SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Elemento.
setpt_prev ()
Obtiene el elemento anterior del set, tras decrementar el iterador interno.
type* setpt_prev(SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Puntero al elemento anterior o NULL
si el iterador ha alcanzado el primero.
Observaciones
Utiliza setpt_last para inicializar el iterador interno en recorridos revertidos Iteradores.
setpt_prev_const ()
Versión const de setpt_prev.
const type* setpt_prev_const(const SetPt(type) *set, type);
set | El set. |
type | Tipo de objeto. |
Retorna
Elemento.
setpt_foreach ()
Recorre todos los elementos del set. Utiliza setpt_fornext para cerrar el bucle.
void setpt_foreach(type *elem, SetPt(type) *set, type);
1 2 3 |
setpt_foreach(product, set, Product) bstd_printf("Position:%d, Id:%d\n", product_i, product->id); setpt_fornext(product, set, Product) |
elem | Nombre de la variable 'elemento' dentro del bucle. Añadiendo el sufijo |
set | El set. |
type | Tipo de objeto. |
setpt_foreach_const ()
Versión const de setpt_foreach.
void setpt_foreach_const(const type *elem, const SetPt(type) *set, type);
elem | Elemento. |
set | El set. |
type | Tipo de objeto. |
setpt_fornext ()
Cierra el bucle abierto por setpt_foreach, incrementando el iterador interno.
void setpt_fornext(type *elem, SetPt(type) *set, type);
elem | Nombre de la variable 'elemento'. Debe ser el mismo que |
set | El set. |
type | Tipo de objeto. |
setpt_fornext_const ()
Versión const de setpt_fornext.
void setpt_fornext_const(const type *elem, const SetPt(type) *set, type);
elem | Elemento. |
set | El set. |
type | Tipo de objeto. |
setpt_forback ()
Recorre todos los elementos del set en orden inverso. Utiliza setpt_forprev para cerrar el bucle.
void setpt_forback(type *elem, SetPt(type) *set, type);
1 2 3 4 |
// Now in reverse order setpt_forback(product, set, Product) bstd_printf("Position:%d, Id:%d\n", product_i, product->id); setpt_forprev(product, set, Product) |
elem | Nombre de la variable 'elemento' dentro del bucle. Añadiendo el sufijo |
set | El set. |
type | Tipo de objeto. |
setpt_forback_const ()
Versión const de setpt_forback.
void setpt_forback_const(const type *elem, const SetPt(type) *set, type);
elem | Elemento. |
set | El set. |
type | Tipo de objeto. |
setpt_forprev ()
Cierra el bucle abierto por setpt_forback, decrementando el iterador interno.
void setpt_forprev(type *elem, SetPt(type) *set, type);
elem | Nombre de la variable 'elemento'. Debe ser el mismo que |
set | El set. |
type | Tipo de objeto. |
setpt_forprev_const ()
Versión const de setpt_forprev.
void setpt_forprev_const(const type *elem, const SetPt(type) *set, type);
elem | Elemento. |
set | El set. |
type | Tipo de objeto. |