225 {
227
228
231 fl::size existingLen =
mLength;
233 if (existingLen > 0 && existingData) {
235 }
240 } else {
242 if (existingLen > 0 && existingData) {
243 fl::memcpy(newData->data(), existingData, existingLen);
244 }
245 fl::memcpy(newData->data() + existingLen, str, n);
246 newData->data()[newLen] = '\0';
249 }
251 }
252
255 if (!heap->hasCapacity(newLen)) {
256
257
258 const char* bufStart = heap->data();
259 fl::size grow_length =
fl::max(3, newLen * 3 / 2);
260 if (str >= bufStart && str < bufStart +
mLength + 1) {
261 fl::size
offset =
static_cast<fl::size
>(str - bufStart);
262 heap->grow(grow_length);
263 str = heap->data() +
offset;
264 } else {
265 heap->grow(grow_length);
266 }
267 }
273
275 {
279 newData->data()[newLen] = '\0';
282 }
284 }
293 }
294
296 {
299 newData->data()[newLen] = '\0';
302 }
304}
bool isNonOwning() const FL_NOEXCEPT
bool hasHeapData() const FL_NOEXCEPT
NotNullStringHolderPtr & heapData() FL_NOEXCEPT
fl::variant< NotNullStringHolderPtr, ConstLiteral, ConstView > mStorage
char * inlineBufferPtr() FL_NOEXCEPT
const char * constData() const FL_NOEXCEPT
fl::UISlider offset("Offset", 0.0f, 0.0f, 1.0f, 0.01f)
void * memcpy(void *dest, const void *src, size_t n) FL_NOEXCEPT
constexpr common_type_t< T, U > max(T a, U b) FL_NOEXCEPT
fl::not_null< StringHolderPtr > NotNullStringHolderPtr
shared_ptr< T > make_shared(Args &&... args) FL_NOEXCEPT
pair_element< I, T1, T2 >::type & get(pair< T1, T2 > &p) FL_NOEXCEPT
#define FL_DISABLE_WARNING(warning)
#define FL_DISABLE_WARNING_PUSH
#define FL_DISABLE_WARNING_POP