src/cx/string.h

changeset 1050
3df63e95921a
parent 1046
fe2c842fce4b
equal deleted inserted replaced
1049:415bf2ce6bab 1050:3df63e95921a
242 cxstring cx_strn( 242 cxstring cx_strn(
243 const char *cstring, 243 const char *cstring,
244 size_t length 244 size_t length
245 ); 245 );
246 246
247 #ifdef __cplusplus
248 } // extern "C"
249 cx_attr_nodiscard
250 static inline cxstring cx_strcast(cxmutstr str) {
251 return cx_strn(str.ptr, str.length);
252 }
253 cx_attr_nodiscard
254 static inline cxstring cx_strcast(cxstring str) {
255 return str;
256 }
257 extern "C" {
258 #else
259 /**
260 * Internal function, do not use.
261 * @param str
262 * @return
263 * @see cx_strcast()
264 */
265 cx_attr_nodiscard
266 static inline cxstring cx_strcast_m(cxmutstr str) {
267 return (cxstring) {str.ptr, str.length};
268 }
269 /**
270 * Internal function, do not use.
271 * @param str
272 * @return
273 * @see cx_strcast()
274 */
275 cx_attr_nodiscard
276 static inline cxstring cx_strcast_c(cxstring str) {
277 return str;
278 }
279
247 /** 280 /**
248 * Casts a mutable string to an immutable string. 281 * Casts a mutable string to an immutable string.
249 * 282 *
250 * \note This is not seriously a cast. Instead you get a copy 283 * Does nothing for already immutable strings.
284 *
285 * \note This is not seriously a cast. Instead, you get a copy
251 * of the struct with the desired pointer type. Both structs still 286 * of the struct with the desired pointer type. Both structs still
252 * point to the same location, though! 287 * point to the same location, though!
253 * 288 *
254 * @param str the mutable string to cast 289 * @param str the mutable string to cast
255 * @return an immutable copy of the string pointer 290 * @return an immutable copy of the string pointer
256 */ 291 */
257 cx_attr_nodiscard 292 #define cx_strcast(str) _Generic((str), \
258 cxstring cx_strcast(cxmutstr str); 293 cxmutstr: cx_strcast_m, \
294 cxstring: cx_strcast_c) \
295 (str)
296 #endif
259 297
260 /** 298 /**
261 * Passes the pointer in this string to \c free(). 299 * Passes the pointer in this string to \c free().
262 * 300 *
263 * The pointer in the struct is set to \c NULL and the length is set to zero. 301 * The pointer in the struct is set to \c NULL and the length is set to zero.

mercurial