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}