95 std::u32string m_string;
97#if TGUI_COMPILED_WITH_CPP_VER >= 17
99 template <
typename StringViewType>
100 using IsStringViewType = std::enable_if_t<
101 std::is_same_v<StringViewType, std::string_view>
102#if defined(__cpp_lib_char8_t) && (__cpp_lib_char8_t >= 201811L)
103 || std::is_same_v<StringViewType, std::u8string_view>
105 || std::is_same_v<StringViewType, std::wstring_view>
106 || std::is_same_v<StringViewType, std::u16string_view>
107 || std::is_same_v<StringViewType, std::u32string_view>,
113#if TGUI_COMPILED_WITH_CPP_VER >= 17
114 static constexpr auto npos = std::u32string_view::npos;
116 static const decltype(std::u32string::npos) npos;
119 using iterator = std::u32string::iterator;
120 using const_iterator = std::u32string::const_iterator;
121 using reverse_iterator = std::u32string::reverse_iterator;
122 using const_reverse_iterator = std::u32string::const_reverse_iterator;
124 using value_type = char32_t;
125 using reference =
char32_t&;
126 using const_reference =
const char32_t&;
164 TGUI_NODISCARD
int toInt(
int defaultValue = 0)
const;
173 TGUI_NODISCARD
unsigned int toUInt(
unsigned int defaultValue = 0)
const;
182 TGUI_NODISCARD
float toFloat(
float defaultValue = 0)
const;
189 TGUI_NODISCARD String
trim()
const;
214#ifndef TGUI_REMOVE_DEPRECATED_CODE
224 TGUI_DEPRECATED(
"Use starts_with instead") TGUI_NODISCARD
bool startsWith(const String& substring) const;
236#ifndef TGUI_REMOVE_DEPRECATED_CODE
246 TGUI_DEPRECATED(
"Use ends_with instead") TGUI_NODISCARD
bool endsWith(const String& substring) const;
266 String&
replace(
const String& searchFor,
const String& replaceWith);
281 TGUI_NODISCARD std::vector<String>
split(
const String& delimiter,
bool trim =
false)
const;
289 TGUI_NODISCARD
static String
join(
const std::vector<String>& segments,
const String& separator);
298 template <
typename T>
304 TGUI_IF_CONSTEXPR (std::is_integral<T>::value)
306 return {std::to_string(value)};
310 std::ostringstream oss;
311 oss.imbue(std::locale::classic());
325 template <
typename T>
331 TGUI_IF_CONSTEXPR (std::is_integral<T>::value)
332 return {std::to_string(value)};
335 std::ostringstream oss;
336 oss.imbue(std::locale::classic());
337 oss << std::fixed << std::setprecision(static_cast<int>(decimals));
348 String(
const std::string& str);
349 String(
const std::wstring& str);
350 String(
const std::u16string& str);
351 String(
const std::u32string& str);
353 String(std::u32string&& str) :
354 m_string{std::move(str)}
358 String(
char ansiChar);
359 String(
wchar_t wideChar);
360 String(
char16_t utfChar);
361 String(
char32_t utfChar);
363 String(
const char* str);
364 String(
const wchar_t* str);
365 String(
const char16_t* str);
366 String(
const char32_t* str) :
372 template <typename T, typename = typename std::enable_if_t<std::is_arithmetic<T>::value, T>>
373 explicit String(T number) :
374 String{fromNumber(number)}
378 String(std::size_t count,
char ch);
379 String(std::size_t count,
wchar_t ch);
380 String(std::size_t count,
char16_t ch);
381 String(std::size_t count,
char32_t ch);
383 String(
const std::string& str, std::size_t pos);
384 String(
const std::wstring& str, std::size_t pos);
385 String(
const std::u16string& str, std::size_t pos);
386 String(
const std::u32string& str, std::size_t pos);
388 String(
const std::string& str, std::size_t pos, std::size_t count);
389 String(
const std::wstring& str, std::size_t pos, std::size_t count);
390 String(
const std::u16string& str, std::size_t pos, std::size_t count);
391 String(
const std::u32string& str, std::size_t pos, std::size_t count);
393 String(
const char* str, std::size_t count);
394 String(
const wchar_t* str, std::size_t count);
395 String(
const char16_t* str, std::size_t count);
396 String(
const char32_t* str, std::size_t count);
398 explicit String(std::initializer_list<char> chars);
399 explicit String(std::initializer_list<wchar_t> chars);
400 explicit String(std::initializer_list<char16_t> chars);
401 explicit String(std::initializer_list<char32_t> chars);
407 explicit String(std::string::const_iterator first, std::string::const_iterator last);
408 explicit String(std::wstring::const_iterator first, std::wstring::const_iterator last);
409 explicit String(std::u16string::const_iterator first, std::u16string::const_iterator last);
410 explicit String(std::u32string::const_iterator first, std::u32string::const_iterator last);
412#if TGUI_COMPILED_WITH_CPP_VER >= 17
413 template <
typename StringViewType,
typename = IsStringViewType<StringViewType>>
414 explicit String(
const StringViewType& stringView) :
415 String(stringView.data(), stringView.size())
419 template <
typename StringViewType,
typename = IsStringViewType<StringViewType>>
420 explicit String(
const StringViewType& stringView, std::size_t pos, std::size_t count) :
421 String(stringView.data() + pos, count)
425 template <
typename CharType>
426 explicit String(StringViewImpl<CharType> stringView) :
427 String(stringView.data(), stringView.size())
431 template <
typename CharType>
432 explicit String(StringViewImpl<CharType> stringView, std::size_t pos, std::size_t count) :
433 String(stringView.data() + pos, count)
438#if TGUI_HAS_WINDOW_BACKEND_SFML
440 explicit String(
const sf::String& str)
441 #if SFML_VERSION_MAJOR >= 3
442 : m_string{str.toUtf32()}
444 : m_string{
reinterpret_cast<const char32_t*
>(str.toUtf32().c_str())}
449 explicit operator sf::String()
const
451 return sf::String::fromUtf32(m_string.begin(), m_string.end());
455 explicit operator std::string()
const;
456 explicit operator std::wstring()
const;
457 explicit operator std::u16string()
const;
458 explicit operator const std::u32string&()
const
463 operator StringView() const noexcept
465#if TGUI_COMPILED_WITH_CPP_VER >= 17
468 return StringView(m_string.data(), m_string.length());
472 TGUI_NODISCARD std::string toStdString()
const;
473 TGUI_NODISCARD std::wstring toWideString()
const;
474 TGUI_NODISCARD std::u16string toUtf16()
const;
475 TGUI_NODISCARD
const std::u32string& toUtf32()
const
480 String& assign(std::size_t count,
char ch);
481 String& assign(std::size_t count,
wchar_t ch);
482 String& assign(std::size_t count,
char16_t ch);
483 String& assign(std::size_t count,
char32_t ch);
485 String& assign(StringView sv);
486 String& assign(
const char32_t* str);
487 String& assign(
const std::u32string& str);
488 String& assign(
const String& str);
490 String& assign(StringView sv, std::size_t pos, std::size_t count = npos);
491 String& assign(
const std::string& str, std::size_t pos, std::size_t count = npos);
492 String& assign(
const std::wstring& str, std::size_t pos, std::size_t count = npos);
493 String& assign(
const std::u16string& str, std::size_t pos, std::size_t count = npos);
494 String& assign(
const std::u32string& str, std::size_t pos, std::size_t count = npos);
495 String& assign(
const String& str, std::size_t pos, std::size_t count = npos);
497 String& assign(std::u32string&& str);
498 String& assign(String&& str);
500 String& assign(
const char* str, std::size_t count);
501 String& assign(
const wchar_t* str, std::size_t count);
502 String& assign(
const char16_t* str, std::size_t count);
503 String& assign(
const char32_t* str, std::size_t count);
505 String& assign(std::initializer_list<char> chars);
506 String& assign(std::initializer_list<wchar_t> chars);
507 String& assign(std::initializer_list<char16_t> chars);
508 String& assign(std::initializer_list<char32_t> chars);
510 String& assign(std::string::const_iterator first, std::string::const_iterator last);
511 String& assign(std::wstring::const_iterator first, std::wstring::const_iterator last);
512 String& assign(std::u16string::const_iterator first, std::u16string::const_iterator last);
513 String& assign(std::u32string::const_iterator first, std::u32string::const_iterator last);
514 String& assign(StringView::const_iterator first, StringView::const_iterator last);
516 TGUI_NODISCARD reference at(std::size_t pos);
517 TGUI_NODISCARD const_reference at(std::size_t pos)
const;
519 TGUI_NODISCARD const_reference operator [](std::size_t index)
const;
520 TGUI_NODISCARD reference operator [](std::size_t index);
522 TGUI_NODISCARD reference front();
523 TGUI_NODISCARD const_reference front()
const;
525 TGUI_NODISCARD reference back();
526 TGUI_NODISCARD const_reference back()
const;
528 TGUI_NODISCARD
const char32_t* data() const noexcept
530 return m_string.data();
533 TGUI_NODISCARD
char32_t* data() noexcept
535#if __cplusplus >= 201703L
536 return m_string.data();
542 TGUI_NODISCARD
const char32_t* c_str() const noexcept
544 return m_string.c_str();
547 TGUI_NODISCARD iterator begin() noexcept;
548 TGUI_NODISCARD const_iterator begin() const noexcept;
549 TGUI_NODISCARD const_iterator cbegin() const noexcept;
551 TGUI_NODISCARD iterator end() noexcept;
552 TGUI_NODISCARD const_iterator end() const noexcept;
553 TGUI_NODISCARD const_iterator cend() const noexcept;
555 TGUI_NODISCARD reverse_iterator rbegin() noexcept;
556 TGUI_NODISCARD const_reverse_iterator rbegin() const noexcept;
557 TGUI_NODISCARD const_reverse_iterator crbegin() const noexcept;
559 TGUI_NODISCARD reverse_iterator rend() noexcept;
560 TGUI_NODISCARD const_reverse_iterator rend() const noexcept;
561 TGUI_NODISCARD const_reverse_iterator crend() const noexcept;
563 TGUI_NODISCARD
bool empty() const noexcept
565 return m_string.empty();
568 TGUI_NODISCARD std::size_t size() const noexcept
570 return m_string.size();
573 TGUI_NODISCARD std::size_t length() const noexcept
575 return m_string.length();
578 TGUI_NODISCARD std::size_t max_size() const noexcept;
580 void reserve(std::
size_t newCap);
581 TGUI_NODISCARD std::
size_t capacity() const noexcept;
582 void shrink_to_fit();
584 void clear() noexcept;
586 String& insert(std::
size_t index, std::
size_t count,
char ch);
587 String& insert(std::
size_t index, std::
size_t count,
wchar_t ch);
588 String& insert(std::
size_t index, std::
size_t count,
char16_t ch);
589 String& insert(std::
size_t index, std::
size_t count,
char32_t ch);
591 String& insert(std::
size_t index, StringView sv);
592 String& insert(std::
size_t index, const
char32_t* str);
593 String& insert(std::
size_t index, const std::u32string& str);
594 String& insert(std::
size_t index, const String& str);
596 String& insert(std::
size_t index, StringView sv, std::
size_t pos, std::
size_t count = npos);
597 String& insert(std::
size_t index, const std::
string& str, std::
size_t pos, std::
size_t count = npos);
598 String& insert(std::
size_t index, const std::wstring& str, std::
size_t pos, std::
size_t count = npos);
599 String& insert(std::
size_t index, const std::u16string& str, std::
size_t pos, std::
size_t count = npos);
600 String& insert(std::
size_t index, const std::u32string& str, std::
size_t pos, std::
size_t count = npos);
601 String& insert(std::
size_t index, const String& str, std::
size_t pos, std::
size_t count = npos);
603 String& insert(std::
size_t index, const
char* str, std::
size_t count);
604 String& insert(std::
size_t index, const
wchar_t* str, std::
size_t count);
605 String& insert(std::
size_t index, const
char16_t* str, std::
size_t count);
606 String& insert(std::
size_t index, const
char32_t* str, std::
size_t count);
608 iterator insert(const_iterator pos,
char ch);
609 iterator insert(const_iterator pos,
wchar_t ch);
610 iterator insert(const_iterator pos,
char16_t ch);
611 iterator insert(const_iterator pos,
char32_t ch);
613 iterator insert(const_iterator pos, std::
size_t count,
char ch);
614 iterator insert(const_iterator pos, std::
size_t count,
wchar_t ch);
615 iterator insert(const_iterator pos, std::
size_t count,
char16_t ch);
616 iterator insert(const_iterator pos, std::
size_t count,
char32_t ch);
618 iterator insert(const_iterator pos, std::initializer_list<
char> chars);
619 iterator insert(const_iterator pos, std::initializer_list<
wchar_t> chars);
620 iterator insert(const_iterator pos, std::initializer_list<
char16_t> chars);
621 iterator insert(const_iterator pos, std::initializer_list<
char32_t> chars);
623 iterator insert(const_iterator pos, std::
string::const_iterator first, std::
string::const_iterator last);
624 iterator insert(const_iterator pos, std::wstring::const_iterator first, std::wstring::const_iterator last);
625 iterator insert(const_iterator pos, std::u16string::const_iterator first, std::u16string::const_iterator last);
626 iterator insert(const_iterator pos, std::u32string::const_iterator first, std::u32string::const_iterator last);
627 iterator insert(const_iterator pos, StringView::const_iterator first, StringView::const_iterator last);
629 String& erase(std::
size_t index = 0, std::
size_t count = npos);
631 iterator erase(const_iterator position);
632 iterator erase(const_iterator first, const_iterator last);
634 void push_back(
char ch);
635 void push_back(
wchar_t ch);
636 void push_back(
char16_t ch);
637 void push_back(
char32_t ch);
641 String& append(std::
size_t count,
char ch);
642 String& append(std::
size_t count,
wchar_t ch);
643 String& append(std::
size_t count,
char16_t ch);
644 String& append(std::
size_t count,
char32_t ch);
646 String& append(StringView sv);
647 String& append(const
char32_t* str);
648 String& append(const std::u32string& str);
649 String& append(const String& str);
651 String& append(StringView sv, std::
size_t pos, std::
size_t count = npos);
652 String& append(const std::
string& str, std::
size_t pos, std::
size_t count = npos);
653 String& append(const std::wstring& str, std::
size_t pos, std::
size_t count = npos);
654 String& append(const std::u16string& str, std::
size_t pos, std::
size_t count = npos);
655 String& append(const std::u32string& str, std::
size_t pos, std::
size_t count = npos);
656 String& append(const String& str, std::
size_t pos, std::
size_t count = npos);
658 String& append(const
char* str, std::
size_t count);
659 String& append(const
wchar_t* str, std::
size_t count);
660 String& append(const
char16_t* str, std::
size_t count);
661 String& append(const
char32_t* str, std::
size_t count);
663 String& append(std::
string::const_iterator first, std::
string::const_iterator last);
664 String& append(std::wstring::const_iterator first, std::wstring::const_iterator last);
665 String& append(std::u16string::const_iterator first, std::u16string::const_iterator last);
666 String& append(std::u32string::const_iterator first, std::u32string::const_iterator last);
667 String& append(StringView::const_iterator first, StringView::const_iterator last);
669 String& append(std::initializer_list<
char> chars);
670 String& append(std::initializer_list<
wchar_t> chars);
671 String& append(std::initializer_list<
char16_t> chars);
672 String& append(std::initializer_list<
char32_t> chars);
674 String& operator+=(const String& str);
676 TGUI_NODISCARD
int compare(StringView sv) const noexcept;
677 TGUI_NODISCARD
int compare(const
char32_t* s) const;
678 TGUI_NODISCARD
int compare(const std::u32string& str) const noexcept;
679 TGUI_NODISCARD
int compare(const String& str) const noexcept;
681 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, StringView sv) const;
682 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const
char32_t* s) const;
683 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const std::u32string& str) const;
684 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const String& str) const;
686 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, StringView sv, std::
size_t pos2, std::
size_t count2 = npos) const;
687 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const std::
string& str, std::
size_t pos2, std::
size_t count2 = npos) const;
688 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const std::wstring& str, std::
size_t pos2, std::
size_t count2 = npos) const;
689 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const std::u16string& str, std::
size_t pos2, std::
size_t count2 = npos) const;
690 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const std::u32string& str, std::
size_t pos2, std::
size_t count2 = npos) const;
691 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const String& str, std::
size_t pos2, std::
size_t count2 = npos) const;
693 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const
char* s, std::
size_t count2) const;
694 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const
wchar_t* s, std::
size_t count2) const;
695 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const
char16_t* s, std::
size_t count2) const;
696 TGUI_NODISCARD
int compare(std::
size_t pos1, std::
size_t count1, const
char32_t* s, std::
size_t count2) const;
698 String& replace(std::
size_t pos, std::
size_t count, StringView sv);
699 String& replace(std::
size_t pos, std::
size_t count, const
char32_t* cstr);
700 String& replace(std::
size_t pos, std::
size_t count, const std::u32string& str);
701 String& replace(std::
size_t pos, std::
size_t count, const String& str);
703 String& replace(const_iterator first, const_iterator last, StringView sv);
704 String& replace(const_iterator first, const_iterator last, const
char32_t* cstr);
705 String& replace(const_iterator first, const_iterator last, const std::u32string& str);
706 String& replace(const_iterator first, const_iterator last, const String& str);
708 String& replace(std::
size_t pos, std::
size_t count, StringView sv, std::
size_t pos2, std::
size_t count2 = npos);
709 String& replace(std::
size_t pos, std::
size_t count, const std::
string& str, std::
size_t pos2, std::
size_t count2 = npos);
710 String& replace(std::
size_t pos, std::
size_t count, const std::wstring& str, std::
size_t pos2, std::
size_t count2 = npos);
711 String& replace(std::
size_t pos, std::
size_t count, const std::u16string& str, std::
size_t pos2, std::
size_t count2 = npos);
712 String& replace(std::
size_t pos, std::
size_t count, const std::u32string& str, std::
size_t pos2, std::
size_t count2 = npos);
713 String& replace(std::
size_t pos, std::
size_t count, const String& str, std::
size_t pos2, std::
size_t count2 = npos);
715 String& replace(const_iterator first, const_iterator last, std::
string::const_iterator first2, std::
string::const_iterator last2);
716 String& replace(const_iterator first, const_iterator last, std::wstring::const_iterator first2, std::wstring::const_iterator last2);
717 String& replace(const_iterator first, const_iterator last, std::u16string::const_iterator first2, std::u16string::const_iterator last2);
718 String& replace(const_iterator first, const_iterator last, std::u32string::const_iterator first2, std::u32string::const_iterator last2);
719 String& replace(const_iterator first, const_iterator last, StringView::const_iterator first2, StringView::const_iterator last2);
721 String& replace(std::
size_t pos, std::
size_t count, const
char* cstr, std::
size_t count2);
722 String& replace(std::
size_t pos, std::
size_t count, const
wchar_t* cstr, std::
size_t count2);
723 String& replace(std::
size_t pos, std::
size_t count, const
char16_t* cstr, std::
size_t count2);
724 String& replace(std::
size_t pos, std::
size_t count, const
char32_t* cstr, std::
size_t count2);
726 String& replace(const_iterator first, const_iterator last, const
char* cstr, std::
size_t count2);
727 String& replace(const_iterator first, const_iterator last, const
wchar_t* cstr, std::
size_t count2);
728 String& replace(const_iterator first, const_iterator last, const
char16_t* cstr, std::
size_t count2);
729 String& replace(const_iterator first, const_iterator last, const
char32_t* cstr, std::
size_t count2);
731 String& replace(std::
size_t pos, std::
size_t count, std::
size_t count2,
char ch);
732 String& replace(std::
size_t pos, std::
size_t count, std::
size_t count2,
wchar_t ch);
733 String& replace(std::
size_t pos, std::
size_t count, std::
size_t count2,
char16_t ch);
734 String& replace(std::
size_t pos, std::
size_t count, std::
size_t count2,
char32_t ch);
736 String& replace(const_iterator first, const_iterator last, std::
size_t count2,
char ch);
737 String& replace(const_iterator first, const_iterator last, std::
size_t count2,
wchar_t ch);
738 String& replace(const_iterator first, const_iterator last, std::
size_t count2,
char16_t ch);
739 String& replace(const_iterator first, const_iterator last, std::
size_t count2,
char32_t ch);
741 String& replace(const_iterator first, const_iterator last, std::initializer_list<
char> chars);
742 String& replace(const_iterator first, const_iterator last, std::initializer_list<
wchar_t> chars);
743 String& replace(const_iterator first, const_iterator last, std::initializer_list<
char16_t> chars);
744 String& replace(const_iterator first, const_iterator last, std::initializer_list<
char32_t> chars);
746 TGUI_NODISCARD String substr(std::
size_t pos = 0, std::
size_t count = npos) const;
748 std::
size_t copy(
char32_t* dest, std::
size_t count, std::
size_t pos = 0) const;
750 void resize(std::
size_t count);
751 void resize(std::
size_t count,
char ch);
752 void resize(std::
size_t count,
wchar_t ch);
753 void resize(std::
size_t count,
char16_t ch);
754 void resize(std::
size_t count,
char32_t ch);
756 void swap(String& other) noexcept;
758 TGUI_NODISCARD
bool contains(
char c) const noexcept;
759 TGUI_NODISCARD
bool contains(
wchar_t c) const noexcept;
760 TGUI_NODISCARD
bool contains(
char16_t c) const noexcept;
761 TGUI_NODISCARD
bool contains(
char32_t c) const noexcept;
763 TGUI_NODISCARD
bool contains(StringView sv) const noexcept;
764 TGUI_NODISCARD
bool contains(const
char32_t* s) const;
765 TGUI_NODISCARD
bool contains(const std::u32string& s) const;
766 TGUI_NODISCARD
bool contains(const String& s) const;
768 TGUI_NODISCARD std::
size_t find(StringView sv, std::
size_t pos = 0) const noexcept;
769 TGUI_NODISCARD std::
size_t find(const
char32_t* s, std::
size_t pos = 0) const;
770 TGUI_NODISCARD std::
size_t find(const std::u32string& str, std::
size_t pos = 0) const noexcept;
771 TGUI_NODISCARD std::
size_t find(const String& str, std::
size_t pos = 0) const noexcept;
773 TGUI_NODISCARD std::
size_t find(const
char* s, std::
size_t pos, std::
size_t count) const;
774 TGUI_NODISCARD std::
size_t find(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
775 TGUI_NODISCARD std::
size_t find(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
776 TGUI_NODISCARD std::
size_t find(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
778 TGUI_NODISCARD std::
size_t find(
char ch, std::
size_t pos = 0) const noexcept;
779 TGUI_NODISCARD std::
size_t find(
wchar_t ch, std::
size_t pos = 0) const noexcept;
780 TGUI_NODISCARD std::
size_t find(
char16_t ch, std::
size_t pos = 0) const noexcept;
781 TGUI_NODISCARD std::
size_t find(
char32_t ch, std::
size_t pos = 0) const noexcept;
783 TGUI_NODISCARD std::
size_t find_first_of(StringView sv, std::
size_t pos = 0) const noexcept;
784 TGUI_NODISCARD std::
size_t find_first_of(const
char32_t* s, std::
size_t pos = 0) const;
785 TGUI_NODISCARD std::
size_t find_first_of(const std::u32string& str, std::
size_t pos = 0) const noexcept;
786 TGUI_NODISCARD std::
size_t find_first_of(const String& str, std::
size_t pos = 0) const noexcept;
788 TGUI_NODISCARD std::
size_t find_first_of(const
char* s, std::
size_t pos, std::
size_t count) const;
789 TGUI_NODISCARD std::
size_t find_first_of(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
790 TGUI_NODISCARD std::
size_t find_first_of(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
791 TGUI_NODISCARD std::
size_t find_first_of(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
793 TGUI_NODISCARD std::
size_t find_first_of(
char ch, std::
size_t pos = 0) const noexcept;
794 TGUI_NODISCARD std::
size_t find_first_of(
wchar_t ch, std::
size_t pos = 0) const noexcept;
795 TGUI_NODISCARD std::
size_t find_first_of(
char16_t ch, std::
size_t pos = 0) const noexcept;
796 TGUI_NODISCARD std::
size_t find_first_of(
char32_t ch, std::
size_t pos = 0) const noexcept;
798 TGUI_NODISCARD std::
size_t find_first_not_of(StringView sv, std::
size_t pos = 0) const noexcept;
799 TGUI_NODISCARD std::
size_t find_first_not_of(const
char32_t* s, std::
size_t pos = 0) const;
800 TGUI_NODISCARD std::
size_t find_first_not_of(const std::u32string& str, std::
size_t pos = 0) const noexcept;
801 TGUI_NODISCARD std::
size_t find_first_not_of(const String& str, std::
size_t pos = 0) const noexcept;
803 TGUI_NODISCARD std::
size_t find_first_not_of(const
char* s, std::
size_t pos, std::
size_t count) const;
804 TGUI_NODISCARD std::
size_t find_first_not_of(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
805 TGUI_NODISCARD std::
size_t find_first_not_of(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
806 TGUI_NODISCARD std::
size_t find_first_not_of(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
808 TGUI_NODISCARD std::
size_t find_first_not_of(
char ch, std::
size_t pos = 0) const noexcept;
809 TGUI_NODISCARD std::
size_t find_first_not_of(
wchar_t ch, std::
size_t pos = 0) const noexcept;
810 TGUI_NODISCARD std::
size_t find_first_not_of(
char16_t ch, std::
size_t pos = 0) const noexcept;
811 TGUI_NODISCARD std::
size_t find_first_not_of(
char32_t ch, std::
size_t pos = 0) const noexcept;
813 TGUI_NODISCARD std::
size_t rfind(StringView sv, std::
size_t pos = npos) const noexcept;
814 TGUI_NODISCARD std::
size_t rfind(const
char32_t* s, std::
size_t pos = npos) const;
815 TGUI_NODISCARD std::
size_t rfind(const std::u32string& str, std::
size_t pos = npos) const noexcept;
816 TGUI_NODISCARD std::
size_t rfind(const String& str, std::
size_t pos = npos) const noexcept;
818 TGUI_NODISCARD std::
size_t rfind(const
char* s, std::
size_t pos, std::
size_t count) const;
819 TGUI_NODISCARD std::
size_t rfind(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
820 TGUI_NODISCARD std::
size_t rfind(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
821 TGUI_NODISCARD std::
size_t rfind(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
823 TGUI_NODISCARD std::
size_t rfind(
char ch, std::
size_t pos = npos) const noexcept;
824 TGUI_NODISCARD std::
size_t rfind(
wchar_t ch, std::
size_t pos = npos) const noexcept;
825 TGUI_NODISCARD std::
size_t rfind(
char16_t ch, std::
size_t pos = npos) const noexcept;
826 TGUI_NODISCARD std::
size_t rfind(
char32_t ch, std::
size_t pos = npos) const noexcept;
828 TGUI_NODISCARD std::
size_t find_last_of(StringView sv, std::
size_t pos = npos) const noexcept;
829 TGUI_NODISCARD std::
size_t find_last_of(const
char32_t* s, std::
size_t pos = npos) const;
830 TGUI_NODISCARD std::
size_t find_last_of(const std::u32string& str, std::
size_t pos = npos) const noexcept;
831 TGUI_NODISCARD std::
size_t find_last_of(const String& str, std::
size_t pos = npos) const noexcept;
833 TGUI_NODISCARD std::
size_t find_last_of(const
char* s, std::
size_t pos, std::
size_t count) const;
834 TGUI_NODISCARD std::
size_t find_last_of(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
835 TGUI_NODISCARD std::
size_t find_last_of(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
836 TGUI_NODISCARD std::
size_t find_last_of(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
838 TGUI_NODISCARD std::
size_t find_last_of(
char ch, std::
size_t pos = npos) const noexcept;
839 TGUI_NODISCARD std::
size_t find_last_of(
wchar_t ch, std::
size_t pos = npos) const noexcept;
840 TGUI_NODISCARD std::
size_t find_last_of(
char16_t ch, std::
size_t pos = npos) const noexcept;
841 TGUI_NODISCARD std::
size_t find_last_of(
char32_t ch, std::
size_t pos = npos) const noexcept;
843 TGUI_NODISCARD std::
size_t find_last_not_of(StringView sv, std::
size_t pos = npos) const noexcept;
844 TGUI_NODISCARD std::
size_t find_last_not_of(const
char32_t* s, std::
size_t pos = npos) const;
845 TGUI_NODISCARD std::
size_t find_last_not_of(const std::u32string& str, std::
size_t pos = npos) const noexcept;
846 TGUI_NODISCARD std::
size_t find_last_not_of(const String& str, std::
size_t pos = npos) const noexcept;
848 TGUI_NODISCARD std::
size_t find_last_not_of(const
char* s, std::
size_t pos, std::
size_t count) const;
849 TGUI_NODISCARD std::
size_t find_last_not_of(const
wchar_t* s, std::
size_t pos, std::
size_t count) const;
850 TGUI_NODISCARD std::
size_t find_last_not_of(const
char16_t* s, std::
size_t pos, std::
size_t count) const;
851 TGUI_NODISCARD std::
size_t find_last_not_of(const
char32_t* s, std::
size_t pos, std::
size_t count) const;
853 TGUI_NODISCARD std::
size_t find_last_not_of(
char ch, std::
size_t pos = npos) const noexcept;
854 TGUI_NODISCARD std::
size_t find_last_not_of(
wchar_t ch, std::
size_t pos = npos) const noexcept;
855 TGUI_NODISCARD std::
size_t find_last_not_of(
char16_t ch, std::
size_t pos = npos) const noexcept;
856 TGUI_NODISCARD std::
size_t find_last_not_of(
char32_t ch, std::
size_t pos = npos) const noexcept;
858 TGUI_NODISCARD inline
bool starts_with(StringView sv) const noexcept;
859 TGUI_NODISCARD inline
bool starts_with(const
char32_t* s) const;
860 TGUI_NODISCARD inline
bool starts_with(const std::u32string& s) const;
861 TGUI_NODISCARD inline
bool starts_with(const String& s) const;
863 TGUI_NODISCARD inline
bool starts_with(
char ch) const noexcept;
864 TGUI_NODISCARD inline
bool starts_with(
wchar_t ch) const noexcept;
865 TGUI_NODISCARD inline
bool starts_with(
char16_t ch) const noexcept;
866 TGUI_NODISCARD inline
bool starts_with(
char32_t ch) const noexcept;
868 TGUI_NODISCARD inline
bool ends_with(StringView sv) const noexcept;
869 TGUI_NODISCARD inline
bool ends_with(const
char32_t* s) const;
870 TGUI_NODISCARD inline
bool ends_with(const std::u32string& s) const;
871 TGUI_NODISCARD inline
bool ends_with(const String& s) const;
873 TGUI_NODISCARD inline
bool ends_with(
char ch) const noexcept;
874 TGUI_NODISCARD inline
bool ends_with(
wchar_t ch) const noexcept;
875 TGUI_NODISCARD inline
bool ends_with(
char16_t ch) const noexcept;
876 TGUI_NODISCARD inline
bool ends_with(
char32_t ch) const noexcept;
878 TGUI_NODISCARD std::
size_t count(const
char ch, const std::
size_t pos = 0) const noexcept;
879 TGUI_NODISCARD std::
size_t count(const
wchar_t ch, const std::
size_t pos = 0) const noexcept;
880 TGUI_NODISCARD std::
size_t count(const
char16_t ch, const std::
size_t pos = 0) const noexcept;
881 TGUI_NODISCARD std::
size_t count(const
char32_t ch, const std::
size_t pos = 0) const noexcept;
883 inline friend
bool operator==(const String& left, StringView right);
884 inline friend
bool operator==(const String& left, const
char32_t* right);
885 inline friend
bool operator==(const String& left, const std::u32string& right);
886 inline friend
bool operator==(const String& left, const String& right);
888 inline friend
bool operator!=(const String& left, StringView right);
889 inline friend
bool operator!=(const String& left, const
char32_t* right);
890 inline friend
bool operator!=(const String& left, const std::u32string& right);
891 inline friend
bool operator!=(const String& left, const String& right);
893 inline friend
bool operator<(const String& left, StringView right);
894 inline friend
bool operator<(const String& left, const
char32_t* right);
895 inline friend
bool operator<(const String& left, const std::u32string& right);
896 inline friend
bool operator<(const String& left, const String& right);
898 inline friend
bool operator<=(const String& left, StringView right);
899 inline friend
bool operator<=(const String& left, const
char32_t* right);
900 inline friend
bool operator<=(const String& left, const std::u32string& right);
901 inline friend
bool operator<=(const String& left, const String& right);
903 inline friend
bool operator>(const String& left, StringView right);
904 inline friend
bool operator>(const String& left, const
char32_t* right);
905 inline friend
bool operator>(const String& left, const std::u32string& right);
906 inline friend
bool operator>(const String& left, const String& right);
908 inline friend
bool operator>=(const String& left, StringView right);
909 inline friend
bool operator>=(const String& left, const
char32_t* right);
910 inline friend
bool operator>=(const String& left, const std::u32string& right);
911 inline friend
bool operator>=(const String& left, const String& right);
913 inline friend String operator+(const String& left, const String& right);
914 inline friend String operator+(const String& left, String&& right);
915 inline friend String operator+(String&& left, const String& right);
916 inline friend String operator+(String&& left, String&& right);
918#if defined(__cpp_lib_char8_t) && (__cpp_lib_char8_t >= 201811L)
919 inline String(
const std::u8string& str);
920 inline String(
char8_t utfChar);
921 inline String(
const char8_t* str);
922 inline String(std::size_t count,
char8_t ch);
923 inline String(
const std::u8string& str, std::size_t pos);
924 inline String(
const std::u8string& str, std::size_t pos, std::size_t count);
925 inline String(
const char8_t* str, std::size_t count);
926 inline explicit String(std::initializer_list<char8_t> chars);
927 inline explicit String(std::u8string::const_iterator first, std::u8string::const_iterator last);
929 inline explicit operator std::u8string()
const;
931 TGUI_NODISCARD
inline std::u8string toUtf8()
const;
933 inline String& assign(std::size_t count,
char8_t ch);
934 inline String& assign(
const std::u8string& str, std::size_t pos, std::size_t count = npos);
935 inline String& assign(
const char8_t* str, std::size_t count);
936 inline String& assign(std::initializer_list<char8_t> chars);
937 inline String& assign(std::u8string::const_iterator first, std::u8string::const_iterator last);
939 inline String& insert(std::size_t index, std::size_t count,
char8_t ch);
940 inline String& insert(std::size_t index,
const std::u8string& str, std::size_t pos, std::size_t count = npos);
941 inline String& insert(std::size_t index,
const char8_t* str, std::size_t count);
942 inline iterator insert(const_iterator pos,
char8_t ch);
943 inline iterator insert(const_iterator pos, std::size_t count,
char8_t ch);
944 inline iterator insert(const_iterator pos, std::initializer_list<char8_t> chars);
945 inline iterator insert(const_iterator pos, std::u8string::const_iterator first, std::u8string::const_iterator last);
947 inline String& append(std::size_t count,
char8_t ch);
948 inline String& append(
const std::u8string& str, std::size_t pos, std::size_t count = npos);
949 inline String& append(
const char8_t* str, std::size_t count);
950 inline String& append(std::initializer_list<char8_t> chars);
951 inline String& append(std::u8string::const_iterator first, std::u8string::const_iterator last);
953 TGUI_NODISCARD
inline int compare(std::size_t pos1, std::size_t count1,
const std::u8string& str, std::size_t pos2, std::size_t count2 = npos)
const;
954 TGUI_NODISCARD
inline int compare(std::size_t pos1, std::size_t count1,
const char8_t* s, std::size_t count2)
const;
956 inline String& replace(std::size_t pos, std::size_t count,
const std::u8string& str, std::size_t pos2, std::size_t count2 = npos);
957 inline String& replace(const_iterator first, const_iterator last, std::u8string::const_iterator first2, std::u8string::const_iterator last2);
958 inline String& replace(std::size_t pos, std::size_t count,
const char8_t* cstr, std::size_t count2);
959 inline String& replace(const_iterator first, const_iterator last,
const char8_t* cstr, std::size_t count2);
960 inline String& replace(std::size_t pos, std::size_t count, std::size_t count2,
char8_t ch);
961 inline String& replace(const_iterator first, const_iterator last, std::size_t count2,
char8_t ch);
962 inline String& replace(const_iterator first, const_iterator last, std::initializer_list<char8_t> chars);
964 inline void resize(std::size_t count,
char8_t ch);
966 TGUI_NODISCARD
inline bool contains(
char8_t c)
const noexcept;
968 TGUI_NODISCARD
inline std::size_t find(
const char8_t* s, std::size_t pos, std::size_t count)
const;
969 TGUI_NODISCARD
inline std::size_t find(
char8_t ch, std::size_t pos = 0) const noexcept;
971 TGUI_NODISCARD inline std::
size_t find_first_of(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
972 TGUI_NODISCARD inline std::
size_t find_first_of(
char8_t ch, std::
size_t pos = 0) const noexcept;
974 TGUI_NODISCARD inline std::
size_t find_first_not_of(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
975 TGUI_NODISCARD inline std::
size_t find_first_not_of(
char8_t ch, std::
size_t pos = 0) const noexcept;
977 TGUI_NODISCARD inline std::
size_t rfind(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
978 TGUI_NODISCARD inline std::
size_t rfind(
char8_t ch, std::
size_t pos = npos) const noexcept;
980 TGUI_NODISCARD inline std::
size_t find_last_of(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
981 TGUI_NODISCARD inline std::
size_t find_last_of(
char8_t ch, std::
size_t pos = npos) const noexcept;
983 TGUI_NODISCARD inline std::
size_t find_last_not_of(const
char8_t* s, std::
size_t pos, std::
size_t count) const;
984 TGUI_NODISCARD inline std::
size_t find_last_not_of(
char8_t ch, std::
size_t pos = npos) const noexcept;
986 TGUI_NODISCARD inline
bool starts_with(
char8_t ch) const noexcept;
987 TGUI_NODISCARD inline
bool ends_with(
char8_t ch) const noexcept;