1#include "include/pw.h"
2#include "src/types/string/string_internal.h"
3
4[[nodiscard]] bool pw_string_reverse(PwValuePtr str)
5{
6 pw_assert(pw_is_string(str));
7 if (!_pw_string_copy_on_write(str)) {
8 return false;
9 }
10 uint8_t* end_ptr;
11 uint8_t* start_ptr = _pw_string_start_end(str, &end_ptr);
12 uint8_t char_size = str->str_params.char_size;
13 end_ptr -= char_size;
14 while (start_ptr < end_ptr) {
15 char32_t c1 = _pw_get_char(start_ptr, char_size);
16 char32_t c2 = _pw_get_char(end_ptr, char_size);
17 _pw_put_char(start_ptr, c2, char_size);
18 _pw_put_char(end_ptr, c1, char_size);
19 start_ptr += char_size;
20 end_ptr -= char_size;
21 }
22 return true;
23}