summaryrefslogtreecommitdiff
path: root/src/util/vec.h
blob: 5524947b669fb3934dcadc10bd58cc0f24945802 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#ifndef LEO_VEC_H
#define LEO_VEC_H

#include <stddef.h>

#include "alloc.h"

static const size_t LEO_Vec_GROWTH_FACTOR_NUMER = 3;
static const size_t LEO_Vec_GROWTH_FACTOR_DENOM = 2;
static const size_t LEO_Vec_DEFAULT_CAPACITY = 8;

typedef struct {
	LEO_Allocator allocator;
	void *data;
	size_t item_size;
	size_t length;
	size_t capacity;
} LEO_Vec;

typedef enum {
	LEO_Vec_OK                 = 0,
	LEO_Vec_NULL_VEC_POINTER   = 1,
	LEO_Vec_NULL_ITEM_POINTER  = 2,
	LEO_Vec_INVALID_ITEM_SIZE  = 3,
	LEO_Vec_ALLOCATION_FAILURE = 4,
	LEO_Vec_TOO_BIG            = 5,
	LEO_Vec_OUT_OF_BOUNDS      = 6,
} LEO_Vec_Error;

LEO_Vec_Error LEO_Vec_init (LEO_Vec *vec, size_t item_size,
			    LEO_Allocator allocator);

void          LEO_Vec_free (LEO_Vec *vec);
LEO_Vec_Error LEO_Vec_push (LEO_Vec *vec, const void *item);
LEO_Vec_Error LEO_Vec_pop  (LEO_Vec *vec, void *item);
LEO_Vec_Error LEO_Vec_get  (LEO_Vec *vec, size_t i, void *item);

#endif