diff options
| author | Ákos Kőrösi <korakos99@gmail.com> | 2026-05-19 21:13:19 +0200 |
|---|---|---|
| committer | Ákos Kőrösi <korakos99@gmail.com> | 2026-05-19 21:13:19 +0200 |
| commit | 2bdbf387261285d07e4b62d1e23c9e43efb14604 (patch) | |
| tree | 92b81d300f3c17d072f2a30362dafd815e57a758 /utils.h | |
| parent | 6a391a1180766ac5717c40efa70d46cacca83f91 (diff) | |
restructure dir, create makefile
Diffstat (limited to 'utils.h')
| -rw-r--r-- | utils.h | 111 |
1 files changed, 0 insertions, 111 deletions
diff --git a/utils.h b/utils.h deleted file mode 100644 index a213c71..0000000 --- a/utils.h +++ /dev/null @@ -1,111 +0,0 @@ -#pragma once - -#include <ctype.h> -#include <stddef.h> -#include <stdlib.h> -#include <stdbool.h> -#include <stdio.h> -#include <string.h> - - -#define DECLARE_VEC(T, Name) \ - typedef struct { \ - T **blocks; \ - size_t count; \ - size_t used; \ - size_t cap; \ - size_t block_size; \ - } Name; \ - \ - static inline Name make_##Name(size_t block_size) { \ - return (Name){ \ - .blocks = NULL, \ - .count = 0, \ - .used = 0, \ - .cap = 0, \ - .block_size = block_size, \ - }; \ - } \ - \ - static inline T *push_to_##Name(Name *vec, T item) { \ - size_t block_index = vec->count / vec->block_size; \ - size_t item_index = vec->count % vec->block_size; \ - \ - if (block_index == vec->used) { \ - if (vec->used == vec->cap) { \ - size_t new_cap = vec->cap \ - ? vec->cap * 2 \ - : 8; \ - \ - T **new_blocks = realloc( \ - vec->blocks, \ - new_cap * sizeof(T *) \ - ); \ - \ - if (!new_blocks) abort(); \ - \ - vec->blocks = new_blocks; \ - vec->cap = new_cap; \ - } \ - \ - vec->blocks[vec->used] = \ - malloc(vec->block_size * sizeof(T)); \ - \ - if (!vec->blocks[vec->used]) abort(); \ - \ - vec->used++; \ - } \ - \ - T *ptr = &vec->blocks[block_index][item_index]; \ - *ptr = item; \ - \ - vec->count++; \ - return ptr; \ - } \ - \ - static inline T* get_from_##Name(Name *vec, size_t index) { \ - if (index >= vec->count) return NULL; \ - \ - return &vec->blocks \ - [index / vec->block_size] \ - [index % vec->block_size]; \ - } - - -DECLARE_VEC(int, IntVec) - -DECLARE_VEC(char, String); -DECLARE_VEC(char*, StrVec) - - -void append_str_to_String(String* target, const char* src_str); -char* inner(String* str); - - - -#define DECLARE_MAYBE(T, Name) \ - typedef struct { \ - bool some; \ - T value; \ - } Name; - -DECLARE_MAYBE(char*, MaybeStr) - - -typedef struct { - char* key; - char* val; -} StrPair; -DECLARE_VEC(StrPair, KeyValMap) - -void set_map_pair(KeyValMap* map, char* key, char* val); -MaybeStr get_map_value(KeyValMap* map, char* key); -void unset_map_key(KeyValMap* map, char* key); - - -typedef struct { - KeyValMap aliases; - KeyValMap shell_vars; -} ShellState; - -char* get_var(char* varname, ShellState* shstate); |
