57 lines
1.7 KiB
C
57 lines
1.7 KiB
C
#ifndef VECTOR_H
|
|
#define VECTOR_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdio.h>
|
|
#include <stdlib.h>
|
|
|
|
#ifndef DEBUG
|
|
# define DEBUG 0
|
|
#endif
|
|
#define ERR_MEM_ALLOC 1
|
|
#define NO_COLOR "\x1b[0m"
|
|
#define RED "\x1b[31m"
|
|
#define GREEN "\x1b[32m"
|
|
#define BROWN "\x1b[33m"
|
|
#define BLUE "\x1b[34m"
|
|
#define MAGENTA "\x1b[35m"
|
|
#define CYAN "\x1b[36m"
|
|
#define GRAY "\x1b[37m"
|
|
|
|
#define UNINPLEMENTED printf("%s:%d: Not yet implemented", __FILE__, __LINE__)
|
|
#define INITIAL_CAPACITY 4
|
|
#define PDEB(format, ...) \
|
|
if (DEBUG) { \
|
|
fprintf(stderr, \
|
|
GREEN "%s:%d\t" NO_COLOR format "\n", \
|
|
__FILE__, \
|
|
__LINE__, \
|
|
__VA_ARGS__); \
|
|
}
|
|
|
|
/* Destructor typedef */
|
|
typedef void (*Destructor)(void *element);
|
|
|
|
typedef struct Vector_s {
|
|
size_t length;
|
|
size_t capacity;
|
|
size_t offset;
|
|
void ** elements;
|
|
Destructor destroy;
|
|
} Vector;
|
|
|
|
Vector vec_new(Destructor destructor);
|
|
Vector vec_with_capacity(Destructor destructor, size_t capacity);
|
|
|
|
void * vec_at(Vector *self, size_t index);
|
|
void * vec_safe_at(Vector *self, size_t index);
|
|
void * vec_last(Vector *self);
|
|
size_t vec_length(Vector *self);
|
|
size_t vec_capacity(Vector *self);
|
|
void vec_push(Vector *self, void *element);
|
|
void vec_pop(Vector *self);
|
|
void vec_shrink_to_fit(Vector *self);
|
|
void vec_delete(Vector *self);
|
|
|
|
#endif /* VECTOR_H */
|