| 4180 | } |
| 4181 | |
| 4182 | String String::repeat(int p_count) const { |
| 4183 | ERR_FAIL_COND_V_MSG(p_count < 0, "", "Parameter count should be a positive number."); |
| 4184 | |
| 4185 | if (p_count == 0) { |
| 4186 | return ""; |
| 4187 | } |
| 4188 | |
| 4189 | if (p_count == 1) { |
| 4190 | return *this; |
| 4191 | } |
| 4192 | |
| 4193 | int len = length(); |
| 4194 | String new_string = *this; |
| 4195 | new_string.resize_uninitialized(p_count * len + 1); |
| 4196 | |
| 4197 | char32_t *dst = new_string.ptrw(); |
| 4198 | int offset = 1; |
| 4199 | int stride = 1; |
| 4200 | while (offset < p_count) { |
| 4201 | memcpy(dst + offset * len, dst, stride * len * sizeof(char32_t)); |
| 4202 | offset += stride; |
| 4203 | stride = MIN(stride * 2, p_count - offset); |
| 4204 | } |
| 4205 | dst[p_count * len] = _null; |
| 4206 | return new_string; |
| 4207 | } |
| 4208 | |
| 4209 | String String::reverse() const { |
| 4210 | int len = length(); |