diff options
Diffstat (limited to 'sv.h')
-rw-r--r-- | sv.h | 70 |
1 files changed, 0 insertions, 70 deletions
@@ -1,70 +0,0 @@ -/* Copyright (C) 2025 Aryadev Chavali - - * This program is distributed in the hope that it will be useful, but WITHOUT - * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS - * FOR A PARTICULAR PURPOSE. See the GNU General Public License Version 2 for - * details. - - * You may distribute and modify this code under the terms of the GNU General - * Public License Version 2, which you should have received a copy of along with - * this program. If not, please go to <https://www.gnu.org/licenses/>. - - * Created: 2025-04-14 - * Description: String Views - */ - -#ifndef SV_H -#define SV_H - -#include "./memory.h" - -typedef struct SV -{ - u64 size; - char *data; -} sv_t; - -#define SV(DATA, SIZE) ((const sv_t){.size = (SIZE), .data = (DATA)}) -#define SV_FMT(SV) (int)(SV).size, (SV).data -#define PR_SV "%.*s" - -sv_t sv_make(arena_t *allocator, const char *data, u64 size); -sv_t sv_copy(arena_t *allocator, sv_t sv); -sv_t sv_append(arena_t *allocator, sv_t sv, const char *data, u64 size); -sv_t sv_prepend(arena_t *allocator, sv_t sv, const char *data, u64 size); - -/** - * @brief Concatenate two string views, returning that concatenation. - - * Allocates memory. - */ -sv_t sv_concat(arena_t *allocator, sv_t a, sv_t b); - -/** - * @brief Allocates a string view with the given `printf` format. - */ -sv_t sv_fmt(arena_t *allocator, char *fmt, ...); - -/** - * @brief Constructs a new string view at a different offset. Does not allocate - * new memory. - */ -sv_t sv_substr(sv_t sv, u64 index, u64 size); -/** - * @brief Return a string view INDEX characters ahead (i.e. cut the string from - * the left). - */ -sv_t sv_cut(sv_t sv, u64 index); -/** - * @brief Return a string view with SIZE (i.e. chopping the string from the - * right) - */ -sv_t sv_chop(sv_t sv, u64 size); - -i64 sv_find_substr(const sv_t sv, const sv_t substr); -i64 sv_find_subcstr(const sv_t sv, const char *substr, u64 size); -i64 sv_find_any(const sv_t sv, const char *bag); -u64 sv_while(const sv_t sv, bool (*pred)(char)); -u64 sv_till(const sv_t sv, bool (*pred)(char)); - -#endif |