docs/Writerside/topics/strings.md

Sat, 15 Feb 2025 16:36:29 +0100

author
Mike Becker <universe@uap-core.de>
date
Sat, 15 Feb 2025 16:36:29 +0100
changeset 1209
4a72c47226f4
parent 1208
6e78f45b17c3
permissions
-rw-r--r--

complete description for strings and buffers

relates to #451

1141
a06a2d27c043 create new page structure
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 # Strings and Buffers
1208
6e78f45b17c3 add link summary text to strings and buffers topic
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
2
6e78f45b17c3 add link summary text to strings and buffers topic
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
3 For an improved experience when working with strings,
6e78f45b17c3 add link summary text to strings and buffers topic
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
4 UCX provides an API to work with structures that store a [string](string.h.md) together with its length,
6e78f45b17c3 add link summary text to strings and buffers topic
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
5 as well as a more sophisticated [buffer](buffer.h.md) API for working with text of dynamic or unknown length.
6e78f45b17c3 add link summary text to strings and buffers topic
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
6
1209
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
7 Additionally, UCX offers several advanced [printf-like functions](printf.h.md) that also allow the convenient work
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
8 with strings of unknown length.
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
9 For example, one the more advanced functions is `cx_sprintf_sa()` which lets you format a string into an existing
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
10 pre-allocated buffer (e.g. on the stack) and automatically switches to a fresh buffer allocated by a custom allocator
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
11 when the existing buffer is not large enough.
1208
6e78f45b17c3 add link summary text to strings and buffers topic
Mike Becker <universe@uap-core.de>
parents: 1141
diff changeset
12
1209
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
13 The string API is designed to work with _both_ mutable and constant strings.
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
14 The possibility to work with constant strings is especially important, when you want to work with string literals
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
15 without copying them into a separate memory region - e.g. when you want to obtain a substring.
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
16
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
17 By default, UCX assumes strings are constant and stores them in a structure of type `cxstring`.
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
18 Mutable strings are stored in a separate structure called `cxmutstr`.
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
19 You can conveniently convert any UCX string to a `cxstring` by using `cx_strcast()`.
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
20 Several macros throughout UCX already do that for you.
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
21 Since this function is usually inlined, this comes with no additional cost when compiled with optimizations enabled.
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
22
4a72c47226f4 complete description for strings and buffers
Mike Becker <universe@uap-core.de>
parents: 1208
diff changeset
23

mercurial