229 {
231
232
235 fl::size existingLen =
mLength;
237 if (existingLen > 0 && existingData) {
239 }
244 } else {
246 if (existingLen > 0 && existingData) {
247 fl::memcpy(newData->data(), existingData, existingLen);
248 }
249 fl::memcpy(newData->data() + existingLen, str, n);
250 newData->data()[newLen] = '\0';
253 }
255 }
256
259 if (!heap->hasCapacity(newLen)) {
260
261
262 const char* bufStart = heap->data();
263 fl::size grow_length =
fl::max(3, newLen * 3 / 2);
264 if (str >= bufStart && str < bufStart +
mLength + 1) {
265 fl::size
offset =
static_cast<fl::size
>(str - bufStart);
266 heap->grow(grow_length);
267 str = heap->data() +
offset;
268 } else {
269 heap->grow(grow_length);
270 }
271 }
277
279 {
283 newData->data()[newLen] = '\0';
286 }
288 }
297 }
298
300 {
303 newData->data()[newLen] = '\0';
306 }
308}
const char * constData() const FL_NO_EXCEPT
bool isNonOwning() const FL_NO_EXCEPT
NotNullStringHolderPtr & heapData() FL_NO_EXCEPT
bool hasHeapData() const FL_NO_EXCEPT
char * inlineBufferPtr() FL_NO_EXCEPT
fl::variant< NotNullStringHolderPtr, ConstLiteral, ConstView > mStorage
#define FL_DISABLE_WARNING(warning)
#define FL_DISABLE_WARNING_PUSH
#define FL_DISABLE_WARNING_POP
fl::UISlider offset("Offset", 0.0f, 0.0f, 1.0f, 0.01f)
constexpr common_type_t< T, U > max(T a, U b) FL_NO_EXCEPT
fl::not_null< StringHolderPtr > NotNullStringHolderPtr
void * memcpy(void *dest, const void *src, size_t n) FL_NO_EXCEPT
shared_ptr< T > make_shared(Args &&... args) FL_NO_EXCEPT
pair_element< I, T1, T2 >::type & get(pair< T1, T2 > &p) FL_NO_EXCEPT