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
|