SDK Multiplataforma en C logo

SDK Multiplataforma en C

Arrays de punteros

❮ Anterior
Siguiente ❯

Estructura que almacena punteros en posiciones contiguas de memoria. Para arrays de objetos utilizar Arrays.


Funciones

ArrPt(type)*arrpt_create (...)
ArrPt(type)*arrpt_copy (...)
ArrPt(type)*arrpt_read (...)
voidarrpt_destroy (...)
voidarrst_destopt (...)
voidarrpt_clear (...)
voidarrpt_write (...)
uint32_tarrpt_size (...)
type*arrpt_get (...)
type*arrpt_first (...)
type*arrpt_last (...)
type**arrpt_all (...)
type**arrpt_grow (...)
voidarrpt_append (...)
voidarrpt_prepend (...)
voidarrpt_insert (...)
voidarrpt_join (...)
voidarrpt_delete (...)
voidarrpt_pop (...)
voidarrpt_sort (...)
voidarrpt_sort_ex (...)
uint32_tarrpt_find (...)
type*arrpt_search (...)
type*arrpt_bsearch (...)
voidarrpt_foreach (...)
voidarrpt_foreach_rev (...)
voidarrpt_end (void)

arrpt_create ()

Crea un array de punteros vacío.

ArrPt(type)*
arrpt_create(type);
type

Tipo de objeto.

Retorna

El nuevo array.


arrpt_copy ()

Crea una copia de un array de punteros.

ArrPt(type)*
arrpt_copy(const ArrPt(type) *array,
           FPtr_copy func_copy,
           type);
array

El array original.

func_copy

Función de copia del objeto.

type

Tipo de objeto.

Retorna

La copia del array original.

Observaciones

La función de copia debe crear un objeto dinámico y asignar memoria para los campos internos que lo requieran. Si pasamos NULL, se realizará una copia de los punteros originales, lo que puede suponer un riesgo de integridad ya que un mismo objeto puede ser destruido dos veces si no ponemos especial cuidado. Ver Copia de objetos.


arrpt_read ()

Crea un array leyendo su contenido de un Streams (de-serialización).

ArrPt(type)*
arrpt_read(Stream *stream,
           FPtr_read func_read,
           type);
stream

Un stream de lectura.

func_read

Constructor para crear un objeto a partir de los datos obtenidos de un stream. Serialización.

type

Tipo de objeto.

Retorna

El array leído.


arrpt_destroy ()

Destruye un array y todos sus elementos.

void
arrpt_destroy(ArrPt(type)**,
              FPtr_destroy func_destroy,
              type);

El array. Será puesto a NULL tras la destrucción.

func_destroy

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

type

Tipo de objeto.


arrst_destopt ()

Destruye un array y todos sus elementos, siempre y cuando el objeto array no sea NULL.

void
arrst_destopt(ArrSt(type) **array,
              FPtr_destroy func_destroy,
              type);
array

El array.

func_destroy

Ver arrpt_destroy.

type

Tipo de objeto.


arrpt_clear ()

Borra el contenido del array, sin destruir el contenedor que quedará con cero elementos.

void
arrpt_clear(ArrPt(type) *array,
            FPtr_destroy func_destroy,
            type);
array

El array.

func_destroy

Destructor del elemento. Puede ser NULL. Ver arrpt_destroy.

type

Tipo de objeto.


arrpt_write ()

Escribe un array en un Streams (serialización).

void
arrpt_write(Stream *stream,
            const ArrPt(type) *array,
            FPtr_write func_write,
            type);
stream

Un stream de escritura.

array

El array.

func_write

Función que escribe el contenido de un elemento en un stream Serialización.

type

Tipo de objeto.


arrpt_size ()

Obtiene el número de elementos en un array.

uint32_t
arrpt_size(const ArrPt(type) *array,
           type);
array

El array.

type

Tipo de objeto.

Retorna

Número de elementos.


arrpt_get ()

Obtiene un puntero al elemento en la posición pos.

type*
arrpt_get(const ArrPt(type) *array,
          const uint32_t pos,
          type);
array

El array.

pos

Posición o índice del elemento.

type

Tipo de objeto.

Retorna

Puntero al elemento.


arrpt_first ()

Obtiene un puntero al primer elemento del array.

type*
arrpt_first(const ArrPt(type) *array,
            type);
array

El array.

type

Tipo de objeto.

Retorna

Puntero al elemento.


arrpt_last ()

Obtiene un puntero al último elemento del array.

type*
arrpt_last(const ArrPt(type) *array,
           type);
array

El array.

type

Tipo de objeto.

Retorna

Puntero al elemento.


arrpt_all ()

Obtiene un puntero a la memoria interna del array, que da acceso a todos los elementos.

type**
arrpt_all(const ArrPt(type) *array,
          type);
array

El array.

type

Tipo de objeto.

Retorna

Puntero base. Incrementándolo uno a uno iteraremos sobre los elementos.

Observaciones

Utiliza arrpt_foreach para iterar sobre los elementos de forma más segura y elegante.


arrpt_grow ()

Añade n elementos, sin inicializar, al final del array.

type**
arrpt_grow(ArrPt(type) *array,
           const uint32_t n,
           type);
array

El array.

n

Cantidad de elementos a añadir.

type

Tipo de objeto.

Retorna

Puntero al primer elemento añadido.


arrpt_append ()

Añade un puntero al final del array.

void
arrpt_append(ArrPt(type) *array,
             type *value,
             type);
array

El array.

value

Puntero al elemento a añadir.

type

Tipo de objeto.


arrpt_prepend ()

Inserta un puntero al inicio del array. El resto de elementos serán desplazados a la derecha.

void
arrpt_prepend(ArrPt(type) *array,
              type *value,
              type);
array

El array.

value

Puntero al elemento a insertar.

type

Tipo de objeto.


arrpt_insert ()

Inserta un puntero en una posición arbitraria del array.

void
arrpt_insert(ArrPt(type) *array,
             const uint32_t pos,
             type *value,
             type);
array

El array.

pos

Posición donde será insertado. El actual elemento en pos y siguientes serán desplazados a la derecha.

value

Puntero al elemento a insertar.

type

Tipo de objeto.


arrpt_join ()

Une dos vectores. Añade todos los elementos de src al final de dest.

void
arrpt_join(ArrPt(type) *dest,
           const ArrPt(type) *src,
           FPtr_copy func_copy,
           type);
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
ArrPt(Product) *products = create_products(...);
ArrPt(Product) *new_products = new_products(...);

// Join without 'copy' func. Dynamic 'Product' objects will be reused.
arrpt_join(products, new_products, NULL, Product);
arrpt_destroy(&new_products, NULL, Product);
...
arrpt_destroy(&products, i_destroy, Product);

// Join with 'copy' func. Dynamic 'Product' objects will be duplicate.
arrpt_join(products, new_products, i_copy, Product);
arrpt_destroy(&new_products, i_destroy, Product);
...
arrpt_destroy(&products, i_destroy, Product);
dest

El array destino.

src

El array cuyos elementos serán añadidos a dest.

func_copy

Función de copia del objeto.

type

Tipo de objeto.

Observaciones

La función de copia debe crear memoria dinámica tanto para el objeto como para los campos que lo requieran. Si es NULL se solo se añadirá una copia del puntero original a dest.


arrpt_delete ()

Elimina un puntero del array.

void
arrpt_delete(ArrPt(type) *array,
             const uint32_t pos,
             FPtr_destroy func_destroy,
             type);
array

El array.

pos

Posición del elemento a borrar. El actual elemento en pos+1 y siguientes serán desplazados a la izquierda.

func_destroy

Destructor del elemento. Puede ser NULL. Ver arrpt_destroy.

type

Tipo de objeto.


arrpt_pop ()

Elimina el último puntero del array.

void
arrpt_pop(ArrPt(type) *array,
          FPtr_destroy func_destroy,
          type);
array

El array.

func_destroy

Destructor del elemento. Puede ser NULL. Ver arrpt_destroy.

type

Tipo de objeto.


arrpt_sort ()

Ordena los elementos del array utilizando Quicksort.

void
arrpt_sort(ArrPt(type) *array,
           FPtr_compare func_compare,
           type);
array

El array.

func_compare

Función para comparar dos elementos. Ordenar y buscar.

type

Tipo de objeto.


arrpt_sort_ex ()

Ordena los elementos del array utilizando Quicksort y datos adicionales.

void
arrpt_sort_ex(ArrPt(type) *array,
              FPtr_compare_ex func_compare,
              type,
              dtype);
array

El array.

func_compare

Función para comparar dos elementos utilizando un dato adicional.

type

Tipo de objeto.

dtype

Tipo de dato en la función de comparación.


arrpt_find ()

Busca un determinado puntero en el array.

uint32_t
arrpt_find(const ArrPt(type) *array,
           type *elem,
           type);
array

El array.

elem

Puntero a buscar.

type

Tipo de objeto.

Retorna

La posición del puntero si existe, o UINT32_MAX si no.


arrpt_search ()

Busca un elemento en el array de forma lineal O(n).

type*
arrpt_search(ArrPt(type) *array,
             FPtr_compare func_compare,
             ktype key,
             uint32_t *pos,
             type,
             ktype);
array

El array.

func_compare

Función de comparación. El primer parámetro es el elemento, el segundo la clave de búsqueda. Ordenar y buscar.

key

Clave a buscar. Puntero a un tipo de dato que puede ser diferente al tipo de elemento del array.

pos

Posición del elemento en el array (si existe), o UINT32_MAX si no existe. Puede ser NULL.

type

Tipo de objeto.

ktype

Tipo de clave.

Retorna

Puntero al primer elemento que coincida con el criterio de búsqueda o NULL si no existe ninguno.


arrpt_bsearch ()

Busca un elemento en el array de forma logarítmica O(logn).

type*
arrpt_bsearch(ArrPt(type) *array,
              FPtr_compare func_compare,
              ktype key,
              uint32_t *pos,
              type,
              ktype);
array

El array.

func_compare

Función de comparación. El primer parámetro es el elemento, el segundo la clave de búsqueda. Ordenar y buscar.

key

Clave a buscar. Puntero a un tipo de dato que puede ser diferente al tipo de elemento del array.

pos

Posición del elemento en el array (si existe), o UINT32_MAX si no existe. Puede ser NULL.

type

Tipo de objeto.

ktype

Tipo de clave.

Retorna

Puntero al primer elemento que coincida con el criterio de búsqueda o NULL si no existe ninguno.

Observaciones

El array debe estar ordenado según el mismo criterio que la búsqueda. De no ser así el resultado es impredecible.


arrpt_foreach ()

Itera sobre todos los elementos del array. Usa arrpt_end para cerrar el bucle.

void
arrpt_foreach(type *elem,
              ArrPt(type) *array,
              type);
1
2
3
arrpt_foreach(product, array, Product)
    bstd_printf("Index:%d, Id:%d\n", product_i, product->id);
arrpt_end()
elem

Nombre de la variable 'elemento' dentro del bucle. Añadiendo el sufijo '_i' obtenemos el índice.

array

El array.

type

Tipo de objeto.


arrpt_foreach_rev ()

Itera sobre todos los elementos del array hacia atrás, desde el último al primero. Usa arrpt_end para cerrar el bucle.

void
arrpt_foreach_rev(type *elem,
                  ArrPt(type) *array,
                  type);
1
2
3
4
// Now in reverse order
arrpt_foreach_rev(product, array, Product)
    bstd_printf("Index:%d, Id:%d\n", product_i, product->id);
arrpt_end()
elem

Nombre de la variable 'elemento' dentro del bucle. Añadiendo el sufijo '_i' obtenemos el índice.

array

El array.

type

Tipo de objeto.


arrpt_end ()

Cierra el bucle abierto por arrpt_foreach o arrpt_foreach_rev.

void
arrpt_end(void);
❮ Anterior
Siguiente ❯