Monado OpenXR Runtime
u_extension_list.h
Go to the documentation of this file.
1// Copyright 2021, Collabora, Ltd.
2// Copyright 2025-2026, NVIDIA CORPORATION.
3// SPDX-License-Identifier: BSL-1.0
4/*!
5 * @file
6 * @brief A collection of strings, like a list of extensions to enable
7 *
8 * @author Rylie Pavlik <rylie.pavlik@collabora.com>
9 * @ingroup aux_util
10 *
11 */
12#pragma once
13
14#include "xrt/xrt_compiler.h"
15
16
17#ifdef __cplusplus
18extern "C" {
19#endif
20
21
22/*!
23 * @brief An immutable collection of extension strings, these are used to
24 * interface with APIs such as Vulkan and OpenXR who use strings for extensions.
25 *
26 * This structure stores copies of strings internally and provides read-only access.
27 *
28 * @see xrt::auxiliary::util::ExtensionList
29 */
30struct u_extension_list;
31
32/*!
33 * @brief A builder for constructing immutable extension lists.
34 *
35 * This structure allows write-only operations to build up a list of extension
36 * strings.
37 *
38 * @see xrt::auxiliary::util::ExtensionListBuilder
39 */
41
42/*
43 *
44 * Immutable Extension List API
45 *
46 */
47
48/*!
49 * @brief Create an empty extension list, some APIs might require an extension
50 * list to be passed in so there is some utility for this function.
51 *
52 * @public @memberof u_extension_list
53 */
54struct u_extension_list *
56
57/*!
58 * @brief Create a new extension list from an array of strings.
59 *
60 * The strings are copied into the list.
61 *
62 * @param arr an array of zero or more non-null, null-terminated strings.
63 * @param size the number of elements in the array.
64 *
65 * @public @memberof u_extension_list
66 */
67struct u_extension_list *
68u_extension_list_create_from_array(const char *const *arr, uint32_t size);
69
70/*!
71 * @brief Retrieve the number of elements in the list
72 *
73 * @public @memberof u_extension_list
74 */
75uint32_t
77
78/*!
79 * @brief Retrieve the data pointer of the list
80 *
81 * @public @memberof u_extension_list
82 */
83const char *const *
85
86/*!
87 * @brief Check if the string is in the list.
88 *
89 * (Comparing string contents, not pointers)
90 *
91 * @param usl self pointer
92 * @param str a non-null, null-terminated string.
93 *
94 * @return true if the string is in the list.
95 *
96 * @public @memberof u_extension_list
97 */
98bool
99u_extension_list_contains(const struct u_extension_list *uel, const char *str);
100
101/*!
102 * @brief Check if the string is in the list.
103 *
104 * (Comparing string contents, not pointers)
105 *
106 * @param usl self pointer
107 * @param str a string pointer.
108 * @param len the length of the string.
109 *
110 * @return true if the string is in the list.
111 *
112 * @public @memberof u_extension_list
113 */
114bool
115u_extension_list_contains_len(const struct u_extension_list *uel, const char *str, size_t len);
116
117/*!
118 * @brief Destroy an extension list.
119 *
120 * Performs null checks and sets your pointer to zero.
121 *
122 * @public @memberof u_extension_list
123 */
124void
126
127
128/*
129 *
130 * Extension List Builder API
131 *
132 */
133
134/*!
135 * @brief Create an extension list builder.
136 *
137 * @public @memberof u_extension_list_builder
138 */
141
142/*!
143 * @brief Create an extension list builder with room for at least the given number of strings.
144 *
145 * @public @memberof u_extension_list_builder
146 */
149
150/*!
151 * @brief Create an extension list builder from an array of strings.
152 *
153 * The strings are copied into the builder.
154 *
155 * @param arr an array of zero or more non-null, null-terminated strings.
156 * @param size the number of elements in the array.
157 *
158 * @public @memberof u_extension_list_builder
159 */
161u_extension_list_builder_create_from_array(const char *const *arr, uint32_t size);
162
163/*!
164 * @brief Append a new string to the builder.
165 *
166 * The string is copied into the builder.
167 *
168 * @param uslb self pointer
169 * @param str a non-null, null-terminated string.
170 * @return 1 if successfully added, negative for errors.
171 *
172 * @public @memberof u_extension_list_builder
173 */
174int
175u_extension_list_builder_append(struct u_extension_list_builder *uelb, const char *str);
176
177/*!
178 * @brief Append a new string to the builder.
179 *
180 * The string is copied into the builder.
181 *
182 * @param uslb self pointer
183 * @param str a string pointer.
184 * @param len the length of the string.
185 * @return 1 if successfully added, negative for errors.
186 *
187 * @public @memberof u_extension_list_builder
188 */
189int
190u_extension_list_builder_append_len(struct u_extension_list_builder *uelb, const char *str, size_t len);
191
192/*!
193 * @brief Append an array of new strings to the builder.
194 *
195 * The strings are copied into the builder.
196 *
197 * @param uslb self pointer
198 * @param arr an array of zero or more non-null, null-terminated strings.
199 * @param size the number of elements in the array.
200 * @return 1 if successfully added, negative for errors.
201 *
202 * @public @memberof u_extension_list_builder
203 */
204int
205u_extension_list_builder_append_array(struct u_extension_list_builder *uelb, const char *const *arr, uint32_t size);
206
207/*!
208 * @brief Append a new string to the builder, if it's not the same as a string already in the builder.
209 *
210 * (Comparing string contents, not pointers)
211 *
212 * The string is copied into the builder.
213 *
214 * @param uslb self pointer
215 * @param str a non-null, null-terminated string.
216 * @return 1 if successfully added, 0 if already existing so not added, negative for errors.
217 *
218 * @public @memberof u_extension_list_builder
219 */
220int
222
223/*!
224 * @brief Append a new string to the builder, if it's not the same as a string already in the builder.
225 *
226 * (Comparing string contents, not pointers)
227 *
228 * The string is copied into the builder.
229 *
230 * @param uslb self pointer
231 * @param str a string pointer.
232 * @param len the length of the string.
233 * @return 1 if successfully added, 0 if already existing so not added, negative for errors.
234 *
235 * @public @memberof u_extension_list_builder
236 */
237int
238u_extension_list_builder_append_unique_len(struct u_extension_list_builder *uelb, const char *str, size_t len);
239
240/*!
241 * @brief Build an immutable extension list from the builder.
242 *
243 * After calling this, the builder is destroyed and the pointer is set to NULL.
244 *
245 * @param builder_ptr pointer to self pointer
246 * @return a new immutable extension list, or NULL on error.
247 *
248 * @public @memberof u_extension_list_builder
249 */
250XRT_NONNULL_ALL struct u_extension_list *
252
253/*!
254 * @brief Build an immutable extension list from the builder and sort it for
255 * extension lists.
256 *
257 * The list will be sorted first by API (VK, XR, etc.), then all KHR extensions,
258 * then all EXT extensions, then all Vendor extensions, then all experimental
259 * extensions. (Alphabetical within each group.)
260 *
261 * After calling this, the builder is destroyed and the pointer is set to NULL.
262 *
263 * @param builder_ptr pointer to self pointer
264 * @return a new immutable extension list, sorted for extension lists, or NULL on error.
265 *
266 * @public @memberof u_extension_list_builder
267 */
268XRT_NONNULL_ALL struct u_extension_list *
270
271/*!
272 * @brief Destroy an extension list builder.
273 *
274 * Performs null checks and sets your pointer to zero.
275 *
276 * @public @memberof u_extension_list_builder
277 */
278XRT_NONNULL_ALL void
280
281#ifdef __cplusplus
282} // extern "C"
283#endif
Definition: u_extension_list.cpp:40
struct u_extension_list_builder * u_extension_list_builder_create_from_array(const char *const *arr, uint32_t size)
Create an extension list builder from an array of strings.
Definition: u_extension_list.cpp:308
int u_extension_list_builder_append_len(struct u_extension_list_builder *uelb, const char *str, size_t len)
Append a new string to the builder.
Definition: u_extension_list.cpp:341
struct u_extension_list_builder * u_extension_list_builder_create(void)
Create an extension list builder.
Definition: u_extension_list.cpp:286
int u_extension_list_builder_append_unique(struct u_extension_list_builder *uelb, const char *str)
Append a new string to the builder, if it's not the same as a string already in the builder.
Definition: u_extension_list.cpp:373
XRT_NONNULL_ALL void u_extension_list_builder_destroy(struct u_extension_list_builder **builder_ptr)
Destroy an extension list builder.
Definition: u_extension_list.cpp:441
struct u_extension_list_builder * u_extension_list_builder_create_with_capacity(uint32_t capacity)
Create an extension list builder with room for at least the given number of strings.
Definition: u_extension_list.cpp:297
XRT_NONNULL_ALL struct u_extension_list * u_extension_list_builder_build(struct u_extension_list_builder **builder_ptr)
Build an immutable extension list from the builder.
Definition: u_extension_list.cpp:401
XRT_NONNULL_ALL struct u_extension_list * u_extension_list_builder_build_sorted_for_extensions(struct u_extension_list_builder **builder_ptr)
Build an immutable extension list from the builder and sort it for extension lists.
Definition: u_extension_list.cpp:419
int u_extension_list_builder_append_unique_len(struct u_extension_list_builder *uelb, const char *str, size_t len)
Append a new string to the builder, if it's not the same as a string already in the builder.
Definition: u_extension_list.cpp:387
int u_extension_list_builder_append(struct u_extension_list_builder *uelb, const char *str)
Append a new string to the builder.
Definition: u_extension_list.cpp:327
int u_extension_list_builder_append_array(struct u_extension_list_builder *uelb, const char *const *arr, uint32_t size)
Append an array of new strings to the builder.
Definition: u_extension_list.cpp:355
Definition: u_extension_list.cpp:32
struct u_extension_list * u_extension_list_create_from_array(const char *const *arr, uint32_t size)
Create a new extension list from an array of strings.
Definition: u_extension_list.cpp:188
uint32_t u_extension_list_get_size(const struct u_extension_list *uel)
Retrieve the number of elements in the list.
Definition: u_extension_list.cpp:208
struct u_extension_list * u_extension_list_create(void)
Create an empty extension list, some APIs might require an extension list to be passed in so there is...
Definition: u_extension_list.cpp:177
bool u_extension_list_contains_len(const struct u_extension_list *uel, const char *str, size_t len)
Check if the string is in the list.
Definition: u_extension_list.cpp:235
bool u_extension_list_contains(const struct u_extension_list *uel, const char *str)
Check if the string is in the list.
Definition: u_extension_list.cpp:226
void u_extension_list_destroy(struct u_extension_list **list_ptr)
Destroy an extension list.
Definition: u_extension_list.cpp:244
const char *const * u_extension_list_get_data(const struct u_extension_list *uel)
Retrieve the data pointer of the list.
Definition: u_extension_list.cpp:217
Header holding common defines.