chore: figure out how to compile everything with C
This commit is contained in:
parent
3e40eeff2d
commit
32ff120600
8 changed files with 29 additions and 2 deletions
43
src/util/c/dynarray.c
Normal file
43
src/util/c/dynarray.c
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
#include "dynarray.h"
|
||||
|
||||
struct dyn_array {
|
||||
char **array;
|
||||
size_t size;
|
||||
size_t capacity;
|
||||
};
|
||||
|
||||
DynArray *dynarray_init(size_t initial_capacity) {
|
||||
DynArray *da = malloc(sizeof(DynArray));
|
||||
da->size = 0;
|
||||
da->capacity = initial_capacity;
|
||||
|
||||
return da;
|
||||
}
|
||||
|
||||
void dynarray_add(DynArray *da, const char *s) {
|
||||
// An empty dynarray does not have an allocated internal array yet
|
||||
if (da->size == 0) {
|
||||
da->array = malloc(sizeof(char*) * da->capacity);
|
||||
}
|
||||
// Double array size if it's full
|
||||
else if (da->size == da->capacity) {
|
||||
da->array = realloc(da->array, da->capacity * 2);
|
||||
da->capacity *= 2;
|
||||
}
|
||||
|
||||
da->array[da->size] = strdup(s);
|
||||
da->size++;
|
||||
}
|
||||
|
||||
void dynarray_free(DynArray **ptp) {
|
||||
DynArray *da = *ptp;
|
||||
|
||||
for (size_t i = 0; i < da->size; i++) {
|
||||
free(da->array[i]);
|
||||
}
|
||||
|
||||
free(da->array);
|
||||
free(da);
|
||||
|
||||
*ptp = NULL;
|
||||
}
|
||||
14
src/util/c/dynarray.h
Normal file
14
src/util/c/dynarray.h
Normal file
|
|
@ -0,0 +1,14 @@
|
|||
#ifndef VIETER_DYNARRAY
|
||||
#define VIETER_DYNARRAY
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
typedef struct dyn_array DynArray;
|
||||
|
||||
DynArray *dynarray_init(size_t initial_capacity);
|
||||
void dynarray_add(DynArray *da, const char * s);
|
||||
char ** dynarray_get_array(DynArray *da);
|
||||
void dynarray_free(DynArray **ptp);
|
||||
|
||||
#endif
|
||||
7
src/util/util.c.v
Normal file
7
src/util/util.c.v
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
module util
|
||||
|
||||
#flag -I @VMODROOT/c
|
||||
|
||||
// This makes the V compiler include this object file when linking, allowing
|
||||
// all other C parts of the codebase to use it as well.
|
||||
#flag @VMODROOT/c/dynarray.o
|
||||
3
src/util/v.mod
Normal file
3
src/util/v.mod
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
Module{
|
||||
name: 'util'
|
||||
}
|
||||
Reference in a new issue