cvx
Loading...
Searching...
No Matches
dynamic_array.h File Reference

An array that gets reallocated as needed. More...

Go to the source code of this file.

Data Structures

struct  cvx_container
 
struct  dynamic_array_vtabv
 
struct  dynamic_array
 
struct  dynamic_array_iter
 ITERATOR. More...
 

Typedefs

typedef struct cvx_container cvx_container
 

Enumerations

enum  cvx_flags {
  CVX_FLAG_OK = 0 , CVX_FLAG_VTAB = 1 , CVX_FLAG_WRONG_TAG = 2 , CVX_FLAG_ALLOC = 3 ,
  CVX_FLAG_EMPTY = 4 , CVX_FLAG_FULL = 5 , CVX_FLAG_RANGE = 6 , CVX_FLAG_NOT_FOUND = 7 ,
  CVX_FLAG_INVALID = 8 , CVX_FLAG_DUPLICATE = 9 , CVX_FLAG_ERROR = 10
}
 Status and error flags for the CVX library. More...
 
enum  cvx_heap_order { CVX_MAX_HEAP = 1 , CVX_MIN_HEAP = -1 }
 enum cvx_heap_order More...
 

Functions

void da_init (struct dynamic_array *self, struct dynamic_array_vtabv *vtabv, size_t capacity)
 
void da_drop (struct dynamic_array *self)
 
void da_clone (struct dynamic_array *orig, struct dynamic_array *clone)
 
enum cvx_flags da_flag (struct dynamic_array *self)
 
size_t da_count (struct dynamic_array *self)
 
size_t da_capacity (struct dynamic_array *self)
 
_Bool da_empty (struct dynamic_array *self)
 
_Bool da_full (struct dynamic_array *self)
 
TVal da_front (struct dynamic_array *self)
 
TVal da_back (struct dynamic_array *self)
 
TVal da_get (struct dynamic_array *self, size_t index)
 
void da_push_front (struct dynamic_array *self, TVal item)
 Inserts an element at position 0.
 
void da_push_at (struct dynamic_array *self, TVal item, size_t index)
 Inserts an item at position index.
 
void da_push_back (struct dynamic_array *self, TVal item)
 Inserts an element at the last position.
 
TVal da_pop_front (struct dynamic_array *self)
 Removes an item at the index 0.
 
TVal da_pop_at (struct dynamic_array *self, size_t index)
 
TVal da_pop_back (struct dynamic_array *self)
 
TVal da_replace_front (struct dynamic_array *self, TVal _new_)
 
TVal da_replace_back (struct dynamic_array *self, TVal _new_)
 
void da_swap (struct dynamic_array *self, size_t idx1, size_t idx2)
 
int da_compare (struct dynamic_array *left, struct dynamic_array *right)
 
void da_sort (struct dynamic_array *self)
 
_Bool da__assert_capacity (struct dynamic_array *self)
 PRIVATE FUNCTIONS.
 
_Bool da__assert_buffer (struct dynamic_array *self, size_t capacity)
 
struct dynamic_array_iter da_iter__start (TVal *buffer, size_t capacity, size_t count)
 
struct dynamic_array_iter da_iter__end (TVal *buffer, size_t capacity, size_t count)
 
_Bool da_iter_at_end (struct dynamic_array_iter *self)
 
_Bool da_iter_at_start (struct dynamic_array_iter *self)
 
void da_iter_to_end (struct dynamic_array_iter *self)
 
void da_iter_to_start (struct dynamic_array_iter *self)
 
void da_iter_next (struct dynamic_array_iter *self)
 
void da_iter_prev (struct dynamic_array_iter *self)
 
void da_iter_go_to (struct dynamic_array_iter *self)
 
void da_iter_forward (struct dynamic_array_iter *self, size_t steps)
 
void da_iter_backward (struct dynamic_array_iter *self, size_t steps)
 
size_t da_iter_index (struct dynamic_array_iter *self)
 
TVal da_iter_value (struct dynamic_array_iter *self)
 
struct dynamic_array_iter da_iter_start (struct dynamic_array *self)
 
struct dynamic_array_iter da_iter_end (struct dynamic_array *self)
 

Detailed Description

An array that gets reallocated as needed.

Author
Leonardo Vencovsky
Version
0.0.1

Required Macros

  • V: Type name of the array buffer.
  • SNAME: Prefix of all declared structs (e.g. struct SNAME, struct SNAME_vtabv, etc.).
  • PFX: Prefix of all functions, including implementation detail ones.
  • TAG: A unique integer tag that identifies this data structure.

Typedef Documentation

◆ cvx_container

typedef struct cvx_container cvx_container

Enumeration Type Documentation

◆ cvx_flags

enum cvx_flags

Status and error flags for the CVX library.

Error Handling

Enumerator
CVX_FLAG_OK 

No errors.

CVX_FLAG_VTAB 

Required vtab function was not provided.

CVX_FLAG_WRONG_TAG 

Tags are checked so you don't pass the wrong struct to a function.

CVX_FLAG_ALLOC 

Allocation failed.

CVX_FLAG_EMPTY 

Operation can not proceed because the container is empty.

CVX_FLAG_FULL 

When a container that doesn't resize is full.

CVX_FLAG_RANGE 

Index out of range.

CVX_FLAG_NOT_FOUND 

Key or value not found.

CVX_FLAG_INVALID 

Invalid argument or operation.

CVX_FLAG_DUPLICATE 

Duplicate key or value.

CVX_FLAG_ERROR 

Generic error, or unknown error.

◆ cvx_heap_order

enum cvx_heap_order

Defines the two possible heaps:

  • Max Heap has the greatest element at the top
  • Min Heap has the smallest element at the top
Enumerator
CVX_MAX_HEAP 
CVX_MIN_HEAP 

Function Documentation

◆ da__assert_buffer()

_Bool da__assert_buffer ( struct dynamic_array self,
size_t  capacity 
)

◆ da__assert_capacity()

_Bool da__assert_capacity ( struct dynamic_array self)

PRIVATE FUNCTIONS.

◆ da_back()

TVal da_back ( struct dynamic_array self)

◆ da_capacity()

size_t da_capacity ( struct dynamic_array self)

◆ da_clone()

void da_clone ( struct dynamic_array orig,
struct dynamic_array clone 
)

◆ da_compare()

int da_compare ( struct dynamic_array left,
struct dynamic_array right 
)

◆ da_count()

size_t da_count ( struct dynamic_array self)

◆ da_drop()

void da_drop ( struct dynamic_array self)

◆ da_empty()

_Bool da_empty ( struct dynamic_array self)

◆ da_flag()

enum cvx_flags da_flag ( struct dynamic_array self)

◆ da_front()

TVal da_front ( struct dynamic_array self)

◆ da_full()

_Bool da_full ( struct dynamic_array self)

◆ da_get()

TVal da_get ( struct dynamic_array self,
size_t  index 
)

◆ da_init()

void da_init ( struct dynamic_array self,
struct dynamic_array_vtabv vtabv,
size_t  capacity 
)

◆ da_iter__end()

struct dynamic_array_iter da_iter__end ( TVal *  buffer,
size_t  capacity,
size_t  count 
)

◆ da_iter__start()

struct dynamic_array_iter da_iter__start ( TVal *  buffer,
size_t  capacity,
size_t  count 
)

◆ da_iter_at_end()

_Bool da_iter_at_end ( struct dynamic_array_iter self)

◆ da_iter_at_start()

_Bool da_iter_at_start ( struct dynamic_array_iter self)

◆ da_iter_backward()

void da_iter_backward ( struct dynamic_array_iter self,
size_t  steps 
)

◆ da_iter_end()

struct dynamic_array_iter da_iter_end ( struct dynamic_array self)

◆ da_iter_forward()

void da_iter_forward ( struct dynamic_array_iter self,
size_t  steps 
)

◆ da_iter_go_to()

void da_iter_go_to ( struct dynamic_array_iter self)

◆ da_iter_index()

size_t da_iter_index ( struct dynamic_array_iter self)

◆ da_iter_next()

void da_iter_next ( struct dynamic_array_iter self)

◆ da_iter_prev()

void da_iter_prev ( struct dynamic_array_iter self)

◆ da_iter_start()

struct dynamic_array_iter da_iter_start ( struct dynamic_array self)

◆ da_iter_to_end()

void da_iter_to_end ( struct dynamic_array_iter self)

◆ da_iter_to_start()

void da_iter_to_start ( struct dynamic_array_iter self)

◆ da_iter_value()

TVal da_iter_value ( struct dynamic_array_iter self)

◆ da_pop_at()

TVal da_pop_at ( struct dynamic_array self,
size_t  index 
)

◆ da_pop_back()

TVal da_pop_back ( struct dynamic_array self)

◆ da_pop_front()

TVal da_pop_front ( struct dynamic_array self)

Removes an item at the index 0.

Note
_pop* functions do not cause the buffer to shrink.
Parameters
selfa non-NULL pointer to a initialized dynamic array
Returns
the item at position 0, or a "0" initialized item if the array is empty.

Error Handling

  • CVX_FLAG_EMPTY - if there are no items in the dynamic array.

◆ da_push_at()

void da_push_at ( struct dynamic_array self,
TVal  item,
size_t  index 
)

Inserts an item at position index.

Note
If the buffer is full, it gets reallocated. The new buffer's size depends on CVX_BUFFER_GROWTH_RATE and CVX_BUFFER_MIN_SIZE.
Parameters
selfa non-NULL pointer to a initialized dynamic array
itemthe item to be inserted at index
indexmust be 0 <= index <= count

Error Handling

  • CVX_FLAG_ALLOC - if reallocation of the buffer fails

◆ da_push_back()

void da_push_back ( struct dynamic_array self,
TVal  item 
)

Inserts an element at the last position.

Note
If the buffer is full, it gets reallocated. The new buffer's size depends on CVX_BUFFER_GROWTH_RATE and CVX_BUFFER_MIN_SIZE.
Parameters
selfa non-NULL pointer to a initialized dynamic array
itemthe item to be inserted at the back

Error Handling

  • CVX_FLAG_ALLOC - if reallocation of the buffer fails

◆ da_push_front()

void da_push_front ( struct dynamic_array self,
TVal  item 
)

Inserts an element at position 0.

Note
If the buffer is full, it gets reallocated. The new buffer's size depends on CVX_BUFFER_GROWTH_RATE and CVX_BUFFER_MIN_SIZE.
Parameters
selfa non-NULL pointer to a initialized dynamic array
itemthe item to be inserted at the front

Error Handling

  • CVX_FLAG_ALLOC - if reallocation of the buffer fails

◆ da_replace_back()

TVal da_replace_back ( struct dynamic_array self,
TVal  _new_ 
)

◆ da_replace_front()

TVal da_replace_front ( struct dynamic_array self,
TVal  _new_ 
)

◆ da_sort()

void da_sort ( struct dynamic_array self)

◆ da_swap()

void da_swap ( struct dynamic_array self,
size_t  idx1,
size_t  idx2 
)