Added empty

This commit is contained in:
Warwick 2024-04-26 13:08:13 +01:00
parent f78fc942c2
commit 29597aecaf
3 changed files with 30 additions and 5 deletions

View file

@ -19,6 +19,13 @@ void *dyn_arr_init(size_t item_size, size_t capacity) {
return dyna_ptr; return dyna_ptr;
} }
bool dyna_empty(void *array) {
if (dyna_length(array) == 0) {
return false;
}
return true;
}
void *dyna_ensure_capacity(void *array, size_t item_count, size_t item_size) { void *dyna_ensure_capacity(void *array, size_t item_count, size_t item_size) {
dyna_header *header = dyna_get_header(array); dyna_header *header = dyna_get_header(array);
size_t minimum_capacity = header->length + item_count; size_t minimum_capacity = header->length + item_count;

View file

@ -1,14 +1,29 @@
#pragma once #pragma once
#include <stdlib.h> #include <stdlib.h>
#include <stdbool.h>
#define ARRAY_INITIAL_CAPACITY 4 #define ARRAY_INITIAL_CAPACITY 4
/* TODO:
* Functions to implement to match what I want:
* - Capacity
* - shrink capacity to size
* - Modifiers
* - clear
* - insert
* - (optional) insert range
* - pop
* - (optional) swap
* - (optional) resize
*/
typedef struct dyna_header { typedef struct dyna_header {
size_t capacity; size_t capacity;
size_t length; size_t length;
} dyna_header; } dyna_header;
// Initialisation
#define dyna_init(T) (T *)dyn_arr_init(sizeof(T), ARRAY_INITIAL_CAPACITY) #define dyna_init(T) (T *)dyn_arr_init(sizeof(T), ARRAY_INITIAL_CAPACITY)
void *dyn_arr_init(size_t item_size, size_t capacity); void *dyn_arr_init(size_t item_size, size_t capacity);
@ -17,8 +32,9 @@ void *dyn_arr_init(size_t item_size, size_t capacity);
(array)[dyna_get_header(array)->length] = (value), \ (array)[dyna_get_header(array)->length] = (value), \
&(array)[dyna_get_header(array)->length++]) &(array)[dyna_get_header(array)->length++])
// Get meta data
#define dyna_get_header(array) ((dyna_header *)(array)-1) #define dyna_get_header(array) ((dyna_header *)(array)-1)
#define dyna_length(array) (array_header(array)->length) #define dyna_length(array) (dyna_get_header(array)->length)
#define dyna_capacity(array) (array_header(array)->capacity) #define dyna_capacity(array) (dyna_get_header(array)->capacity)
bool dyna_empty(void* array);
void *dyna_ensure_capacity(void *array, size_t item_count, size_t item_size); void *dyna_ensure_capacity(void *array, size_t item_count, size_t item_size);

View file

@ -4,11 +4,13 @@
int main() { int main() {
int *dyna_array = dyna_init(int); int *dyna_array = dyna_init(int);
printf("empty %d\n", dyna_empty(dyna_array));
for (int i = 0; i < 999999999; i++) { for (int i = 0; i < 999999999; i++) {
dyna_append(dyna_array, i); dyna_append(dyna_array, i);
} }
printf("capacity %zu\n", dyna_get_header(dyna_array)->capacity); printf("capacity %zu\n", dyna_capacity(dyna_array));
printf("empty %d\n", dyna_empty(dyna_array));
return EXIT_SUCCESS; return EXIT_SUCCESS;
} }