#ifndef __SAFEC_STR_H #define __SAFEC_STR_H #include "types.h" typedef struct { size_t length; char* __data; } str_t; char* str_at(const str_t* str, size_t idx); str_t str_slice(const str_t* str, size_t start, size_t length); int str_cmp(const str_t* s1, const str_t* s2); /* not found = -1 */ ssize_t str_indexof(const str_t* str, char c); ssize_t str_rindexof(const str_t* str, char c); str_t str_heap_dup(const str_t* str); str_t str_heap_cat(const str_t* s1, const str_t* s2); /* TODO: implement string.h functions for this new string construct */ /* `dst` will be overwritten with the contents of `src` */ void str_to_c_str(char* dst, size_t dst_size, const str_t* src); char* str_to_heap_c_str(const str_t* str); str_t str_heap_alloc(size_t length); str_t str_heap_init(const char* c_str, size_t length); str_t str_heap_init_slice(const char* c_str, size_t start, size_t length); void str_heap_destroy(str_t* str); #endif