jsfw/ser/utils.h
viandoxdev eec4668856
ser
2023-05-06 18:42:50 +02:00

61 lines
1.9 KiB
C

#ifndef UTILS_H
#define UTILS_H
#ifdef NDEBUG
#define IF_DEBUG(...)
#else
#define IF_DEBUG(...) __VA_ARGS__
#endif
#include <stdbool.h>
#include <stdint.h>
typedef unsigned char byte;
#include "hashmap.h"
#include "vector_impl.h"
#define STRING_SLICE(str) ((StringSlice){.ptr = str, .len = sizeof(str) - 1})
typedef struct {
const char *ptr;
uint32_t len;
} StringSlice;
bool string_slice_equal(const void *a, const void *b);
uint32_t string_slice_hash(Hasher state, const void *item);
bool pointer_equal(const void *a, const void *b);
uint32_t pointer_hash(Hasher state, const void *item);
VECTOR_IMPL(void *, PointerVec, pointer);
VECTOR_IMPL(const char *, ConstStringVec, const_string);
VECTOR_IMPL(char, CharVec, char);
VECTOR_IMPL(uint64_t, UInt64Vec, uint64);
VECTOR_IMPL(CharVec, CharVec2, char_vec, _vec_char_drop);
VECTOR_IMPL(StringSlice, StringSliceVec, string_slice);
// Styled strings are very mutable strings
typedef struct {
CharVec chars;
ConstStringVec styles;
} StyledString;
StyledString styled_string_init();
void styled_string_clear(StyledString *str);
void styled_string_set(StyledString *str, size_t index, const char *style, const char *s, size_t len);
void styled_string_set_style(StyledString *str, size_t index, const char *style, size_t len);
void styled_string_fill(StyledString *str, size_t index, char fill, size_t len);
size_t styled_string_available_space(StyledString *str, size_t from, size_t stop_at);
void styled_string_push(StyledString *str, const char *style, const char *s);
char *styled_string_build(StyledString *str);
void styled_string_drop(StyledString str);
// Printf to an allocated string
char *msprintf(const char *fmt, ...);
void charvec_push_str(CharVec *v, const char *str);
void charvec_format(CharVec *v, const char *fmt, ...);
VECTOR_IMPL(StyledString, StyledStringVec, styled_string, styled_string_drop);
#endif