Cthulhu  0.2.10
Cthulhu compiler collection
str.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: LGPL-3.0-only
2 
3 #pragma once
4 
5 #include <ctu_std_api.h>
6 
7 #include "core/analyze.h"
8 #include "core/compiler.h"
9 #include "core/text.h"
10 
11 #include <stdarg.h>
12 #include <stdbool.h>
13 #include <stddef.h>
14 
16 
17 typedef struct arena_t arena_t;
18 typedef struct vector_t vector_t;
19 typedef struct map_t map_t;
20 
25 
39 CT_STD_API size_t str_vsprintf(STA_WRITES(len) char *str, size_t len, IN_STRING const char *fmt, va_list args);
40 
54 STA_PRINTF(3, 4)
55 CT_STD_API size_t str_sprintf(STA_WRITES(len) char *str, size_t len, STA_FORMAT_STRING const char *fmt, ...);
56 
69 
81 CT_STD_API text_t text_vformat(IN_NOTNULL arena_t *arena, IN_STRING const char *fmt, va_list args);
82 
93 CT_STD_API char *str_format(IN_NOTNULL arena_t *arena, STA_FORMAT_STRING const char *fmt, ...);
94 
105 CT_STD_API char *str_vformat(IN_NOTNULL arena_t *arena, IN_STRING const char *fmt, va_list args);
106 
114 CT_STD_API bool str_startswith(IN_STRING const char *str, IN_STRING const char *prefix);
115 
123 CT_STD_API bool str_endswith(IN_STRING const char *str, IN_STRING const char *suffix);
124 
135 CT_STD_API bool str_endswithn(STA_READS(len) const char *str, size_t len, IN_STRING const char *suffix);
136 
147 CT_STD_API char *str_join(IN_STRING const char *sep, IN_NOTNULL const vector_t *parts, IN_NOTNULL arena_t *arena);
148 
159 CT_STD_API char *str_repeat(IN_STRING const char *str, size_t times, IN_NOTNULL arena_t *arena);
160 
170 CT_STD_API char *str_normalize(IN_STRING const char *str, IN_NOTNULL arena_t *arena);
171 
181 CT_STD_API char *str_normalizen(text_view_t text, IN_NOTNULL arena_t *arena);
182 
194 CT_STD_API size_t str_normalize_into(
195  STA_WRITES(len) char *dst,
196  size_t dstlen,
197  STA_READS(srclen) const char *src,
198  size_t srclen);
199 
212 CT_STD_API vector_t *str_split(IN_STRING const char *str, IN_STRING const char *sep, IN_NOTNULL arena_t *arena);
213 
223 CT_STD_API const char *str_common_prefix(IN_NOTNULL const vector_t *args, IN_NOTNULL arena_t *arena);
224 
233 CT_STD_API size_t str_rfind(IN_STRING const char *str, IN_STRING const char *sub);
234 
242 CT_STD_API size_t str_find(IN_STRING const char *str, IN_STRING const char *sub);
243 
251 CT_STD_API size_t str_rfind_any(IN_STRING const char *str, IN_STRING const char *letters);
252 
261 CT_STD_API bool char_is_any_of(char c, IN_STRING const char *chars);
262 
270 CT_STD_API bool str_contains(IN_STRING const char *str, IN_STRING const char *search);
271 
281 CT_STD_API char *str_replace(IN_STRING const char *str, IN_STRING const char *search, IN_STRING const char *repl, IN_NOTNULL arena_t *arena);
282 
288 CT_STD_API void str_replace_inplace(INOUT_NOTNULL text_t *text, IN_STRING const char *search, IN_STRING const char *repl);
289 
294 CT_STD_API void str_trim_back_inplace(INOUT_NOTNULL text_t *text, IN_STRING const char *chars);
295 
300 CT_STD_API void str_sort_inplace(STA_UPDATES(len) char *str, size_t len);
301 
310 CT_STD_API char *str_replace_many(IN_STRING const char *str, IN_NOTNULL const map_t *repl, IN_NOTNULL arena_t *arena);
311 
320 CT_STD_API char *str_erase(STA_READS(len) char *str, size_t len, IN_STRING const char *letters);
321 
329 CT_STD_API char *str_basename(IN_STRING const char *path, IN_NOTNULL arena_t *arena);
330 
338 CT_STD_API char *str_filename(IN_STRING const char *path, IN_NOTNULL arena_t *arena);
339 
347 CT_STD_API char *str_noext(IN_STRING const char *path, IN_NOTNULL arena_t *arena);
348 
356 CT_STD_API char *str_ext(IN_STRING const char *path, IN_NOTNULL arena_t *arena);
357 
365 CT_STD_API char *str_directory(IN_STRING const char *path, IN_NOTNULL arena_t *arena);
366 
374 CT_STD_API char *str_upper(IN_STRING const char *str, IN_NOTNULL arena_t *arena);
375 
384 CT_STD_API char *str_lower(IN_STRING const char *str, IN_NOTNULL arena_t *arena);
385 
392 CT_STD_API char str_tolower(char c);
393 
400 CT_STD_API char str_toupper(char c);
401 
409 CT_STD_API bool text_view_equal(text_view_t lhs, text_view_t rhs);
410 
411 #define STR_WHITESPACE " \t\r\v\n\f"
412 
414 
CT_NODISCARD STA_WRITES(size) void *dst
#define RET_NOTNULL
annotate the return value as not being null
#define CT_PUREFN
mark a function as pure, always returns the same value for the same arguments
Definition: analyze.h:228
#define CT_NODISCARD
mark a function as returning a value that must be used
#define IN_NOTNULL
annotate a parameter as not being null
#define STA_FORMAT_STRING
mark a function parameter as a printf format string
#define STA_READS(size)
annotate a parameter as reading expr elements
#define RET_INSPECT
annotate the return value as needing to be inspected this is the same as CT_NODISCARD but implies tha...
#define CT_CONSTFN
mark a function as const, has no side effects and always returns the same value for the same argument...
Definition: analyze.h:227
#define INOUT_NOTNULL
Definition: analyze.h:101
#define IN_STRING
annotate a parameter as being a null terminated string
#define CT_NOALIAS
mark a function as only modifying pointers passed to it the same as CT_CONSTFN but allowed to modify/...
Definition: analyze.h:226
#define STA_UPDATES(size)
Definition: analyze.h:123
#define CT_BEGIN_API
Definition: compiler.h:129
#define CT_END_API
Definition: compiler.h:130
CT_NODISCARD CT_STD_API char * str_noext(const char *path, arena_t *arena)
remove the last file extension from a path
Definition: str.c:156
CT_PUREFN CT_STD_API size_t str_rfind_any(const char *str, const char *letters)
find the first instance of a set of characters in a string
Definition: str.c:137
CT_NODISCARD CT_PUREFN CT_STD_API bool str_endswithn(STA_READS(len) const char *str, size_t len, const char *suffix)
check if a string ends with a substring
CT_NODISCARD CT_STD_API char * str_replace(const char *str, const char *search, const char *repl, arena_t *arena)
replace all instances of a substring in a string
Definition: str.c:616
CT_STD_API void str_replace_inplace(INOUT_NOTNULL text_t *text, const char *search, const char *repl)
replace all instances of a substring in a string in place
CT_NODISCARD CT_STD_API bool text_view_equal(text_view_t lhs, text_view_t rhs)
check if two strings are equal
Definition: str.c:992
CT_NODISCARD CT_PUREFN CT_STD_API bool str_endswith(const char *str, const char *suffix)
check if a string ends with a substring
Definition: str.c:242
CT_PUREFN CT_STD_API size_t str_find(const char *str, const char *sub)
find the first instance of a substring in a string
Definition: str.c:896
CT_NODISCARD CT_STD_API char * str_normalizen(text_view_t text, arena_t *arena)
turn a string with length into a C string literal
Definition: str.c:524
CT_STD_API size_t str_sprintf(STA_WRITES(len) char *str, size_t len, STA_FORMAT_STRING const char *fmt,...)
format a string with printf-like syntax
CT_NODISCARD STA_FORMAT_STRING const char CT_NODISCARD CT_STD_API text_t text_vformat(arena_t *arena, const char *fmt, va_list args)
format a string
Definition: str.c:56
CT_STD_API void str_sort_inplace(STA_UPDATES(len) char *str, size_t len)
sort a strings contents in place
CT_NODISCARD CT_STD_API char * str_repeat(const char *str, size_t times, arena_t *arena)
repeat a string
Definition: str.c:336
CT_NODISCARD CT_STD_API char * str_upper(const char *str, arena_t *arena)
uppercase an ascii string
Definition: str.c:934
CT_STD_API size_t str_normalize_into(STA_WRITES(len) char *dst, size_t dstlen, STA_READS(srclen) const char *src, size_t srclen)
normalize a string into a buffer
CT_NODISCARD CT_STD_API char * str_filename(const char *path, arena_t *arena)
get the filename from a path
Definition: str.c:218
CT_NODISCARD CT_PUREFN CT_STD_API bool char_is_any_of(char c, const char *chars)
check if a character is any of a set of characters
Definition: str.c:121
CT_NODISCARD CT_STD_API char * str_ext(const char *path, arena_t *arena)
get the last file extension from a path
Definition: str.c:173
CT_NODISCARD CT_STD_API vector_t * str_split(const char *str, const char *sep, arena_t *arena)
split a string into a vector by a separator
Definition: str.c:557
CT_NODISCARD CT_STD_API char * str_normalize(const char *str, arena_t *arena)
turn a string into a C string literal
Definition: str.c:485
CT_NODISCARD CT_STD_API char * str_join(const char *sep, const vector_t *parts, arena_t *arena)
join strings
Definition: str.c:274
CT_NODISCARD STA_FORMAT_STRING const char * fmt
Definition: str.h:68
CT_STD_API void str_trim_back_inplace(INOUT_NOTNULL text_t *text, const char *chars)
trim chars from the back of a string in place
CT_STD_API size_t str_vsprintf(STA_WRITES(len) char *str, size_t len, const char *fmt, va_list args)
format a string with printf-like syntax
CT_NODISCARD CT_STD_API char * str_directory(const char *path, arena_t *arena)
get the directory segment of a path
Definition: str.c:188
CT_NODISCARD CT_STD_API char * str_replace_many(const char *str, const map_t *repl, arena_t *arena)
replace all instances of a each substring in a string with provided replacement
Definition: str.c:736
CT_NODISCARD CT_NOALIAS CT_STD_API char * str_erase(STA_READS(len) char *str, size_t len, const char *letters)
remove all instances of letters from str
CT_NODISCARD CT_STD_API const char * str_common_prefix(const vector_t *args, arena_t *arena)
find the longest common prefix of a vector of paths
Definition: str.c:790
CT_PUREFN CT_STD_API size_t str_rfind(const char *str, const char *sub)
find the last instance of a substring in a string
Definition: str.c:884
CT_NODISCARD CT_STD_API char * str_lower(const char *str, arena_t *arena)
lowercase an ascii string this allocates a new string in the provided arena
Definition: str.c:952
CT_NODISCARD CT_PUREFN CT_STD_API bool str_contains(const char *str, const char *search)
check if a string contains a substring
Definition: str.c:607
CT_NODISCARD STA_PRINTF(2, 3) CT_STD_API text_t text_format(arena_t *arena
format a string
CT_NODISCARD CT_STD_API char * str_basename(const char *path, arena_t *arena)
get the filename from a path
Definition: str.c:203
CT_NODISCARD STA_FORMAT_STRING const char CT_NODISCARD CT_STD_API char * str_vformat(arena_t *arena, const char *fmt, va_list args)
format a string
Definition: str.c:110
CT_NODISCARD CT_CONSTFN CT_STD_API char str_tolower(char c)
get the lowercase version of a character
Definition: str.c:970
CT_NODISCARD CT_CONSTFN CT_STD_API char str_toupper(char c)
get the uppercase version of a character
Definition: str.c:981
CT_NODISCARD CT_PUREFN CT_STD_API bool str_startswith(const char *str, const char *prefix)
see if a string starts with a prefix
Definition: str.c:233
STA_DECL text_t text_format(arena_t *arena, const char *fmt,...)
Definition: str.c:81
STA_DECL char * str_format(arena_t *arena, const char *fmt,...)
Definition: str.c:97
an allocator object
Definition: arena.h:86
an unordered hash map
Definition: map.h:38
arena_t * arena
the arena this map allocates from
Definition: map.h:40
a range of text
Definition: text.h:14
a non-owning view of text
Definition: text.h:24
a generic vector of pointers
Definition: vector.c:16