lr/vec.h
2024-01-29 21:04:49 -06:00

43 lines
944 B
C

#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<stdint.h>
#include<stdbool.h>
#include"vec.h"
#define VECDEFSIZE 64
#define VECVERBOSE true
#define vec_pushi(v,i) do{int x=i;vec_push((v),&x);}while(0)
#define vec_pushc(v,c) do{char x=c;vec_push((v),&x);}while(0)
#define vec_pushh(v,h) do{char*x=h;vec_push((v),&x);}while(0)
#define vec_pushf(v,f) do{float x=f;if(!(v)->isfloat)(v)->isfloat=true;vec_push((v),&x);}while(0)
#define vec_pushs(v,s) do{Str x=str_new();str_assign(&x,s);vec_push((v),&x);}while(0)
// T vec_at(Vec*,size_t,T)
#define vec_at(v,i,T) (((T)(v)->buffer)+(i))
typedef struct Vec
{
void*buffer;
size_t unitsize;
size_t size;
size_t capacity;
bool isfloat;
} Vec;
typedef struct Slice
{
Vec*vec;
size_t start;
size_t end;
} Slice;
Vec vec_new(size_t unitsize);
void vec_free(Vec*v);
void vec_grow(Vec*v);
void vec_pop(Vec*v);
void vec_print(Vec*v,const char*fmt);
void vec_push(Vec*v,const void*d);