SDK Multiplataforma en C logo

SDK Multiplataforma en C

Sets de punteros

❮ Anterior
Siguiente ❯

Conjuntos de punteros. Para información general, consultar Sets - Árboles de búsqueda.


Funciones

SetPt(type)*setpt_create (...)
voidsetpt_destroy (...)
uint32_tsetpt_size (...)
type*setpt_get (...)
bool_tsetpt_insert (...)
bool_tsetpt_delete (...)
type*setpt_first (...)
type*setpt_last (...)
type*setpt_next (...)
type*setpt_prev (...)
voidsetpt_foreach (...)
voidsetpt_fornext (...)
voidsetpt_foreach_rev (...)
voidsetpt_forprev (...)

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 NULL tras la destrucción.

func_destroy

Función para destruir un elemento del set Destructores. Si es NULL se destruirá solo el set, pero no sus elementos.

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

Iteradores.


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 NULL. Ver setpt_destroy.

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

Iteradores.


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

Iteradores.


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_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_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 '_i' obtenemos el índice.

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 setpt_foreach.

set

El set.

type

Tipo de objeto.


setpt_foreach_rev ()

Recorre todos los elementos del set en orden inverso. Utiliza setpt_forprev para cerrar el bucle.

void
setpt_foreach_rev(type *elem,
                  SetPt(type) *set,
                  type);
1
2
3
4
// Now in reverse order
setpt_foreach_rev(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 '_i' obtenemos el índice.

set

El set.

type

Tipo de objeto.


setpt_forprev ()

Cierra el bucle abierto por setpt_foreach_rev, decrementando el iterador interno.

void
setpt_forprev(type *elem,
              SetPt(type) *set,
              type);
elem

Nombre de la variable 'elemento'. Debe ser el mismo que setpt_foreach_rev.

set

El set.

type

Tipo de objeto.

❮ Anterior
Siguiente ❯