| 242 | } |
| 243 | |
| 244 | SZ_PUBLIC void sz_string_range(sz_string_t const *string, sz_ptr_t *start, sz_size_t *length) { |
| 245 | sz_size_t is_small = (sz_cptr_t)string->internal.start == (sz_cptr_t)&string->internal.chars[0]; |
| 246 | sz_size_t is_big_mask = is_small - (sz_size_t)1; |
| 247 | *start = string->external.start; // It doesn't matter if it's on stack or heap, the pointer location is the same. |
| 248 | // If the string is small, use branch-less approach to mask-out the top bytes of the length. |
| 249 | *length = string->external.length & ((sz_size_t)0xFF | is_big_mask); |
| 250 | } |
| 251 | |
| 252 | SZ_PUBLIC sz_size_t sz_string_length(sz_string_t const *string) { |
| 253 | sz_size_t is_small = (sz_cptr_t)string->internal.start == (sz_cptr_t)&string->internal.chars[0]; |
no outgoing calls
no test coverage detected
searching dependent graphs…