20 #include <string_view> 
   26 template<
class char_t, 
class traits_t = 
string_traits::traits<
char_t>>
 
   32 template<
class char_t>
 
   33 using ostream = std::basic_ostream<char_t>;
 
   35 template<
class char_t>
 
   36 using istream = std::basic_istream<char_t>;
 
   42 template<
class char_t, 
class traits_t>
 
   62 template<
class char_t, 
class traits_t>
 
   65     template<
class _
char_t, 
class _traits_t>
 
   66     friend qx::details::istream<_char_t>& ::operator>>(
 
   67         qx::details::istream<_char_t>&    is,
 
   71     using traits_type     = traits_t;
 
   72     using value_type      = 
typename traits_type::value_type;
 
   73     using pointer         = 
typename traits_type::pointer;
 
   74     using const_pointer   = 
typename traits_type::const_pointer;
 
   75     using reference       = 
typename traits_type::reference;
 
   76     using const_reference = 
typename traits_type::const_reference;
 
   77     using difference_type = 
typename traits_type::difference_type;
 
   78     using size_type       = 
typename traits_type::size_type;
 
   79     using string_view     = std::basic_string_view<value_type>;
 
   80     using sstream_type    = std::basic_stringstream<value_type>;
 
   81     using views           = std::vector<string_view>;
 
   82     template<
class... args_t>
 
   83     using format_string_type = 
typename traits_type::template format_string<args_t...>;
 
   85     static constexpr size_type npos = std::numeric_limits<size_type>::max();
 
   97     basic_string(size_type nSymbols, value_type chSymbol) noexcept;
 
  104     basic_string(const_pointer pszSource, size_type nSymbols) noexcept;
 
  130     template<
class fwd_it_t>
 
  131     basic_string(fwd_it_t itFirst, fwd_it_t itLast) noexcept;
 
  138     template<range_of_t_c<
char_t> 
string_t>
 
  148     void assign(size_type nSymbols, value_type chSymbol) noexcept;
 
  155     void assign(const_pointer pszSource, size_type nSymbols) noexcept;
 
  161     void assign(const_pointer pszSource) noexcept;
 
  181     template<
class fwd_it_t>
 
  182     void assign(fwd_it_t itFirst, fwd_it_t itLast) noexcept;
 
  189     template<range_of_t_c<
char_t> 
string_t>
 
  190     void assign(
const string_t& str) noexcept;
 
  199     template<
class... args_t>
 
  200         requires format_acceptable_args_c<char_t, args_t...>
 
  201     void format(
const format_string_type<std::type_identity_t<args_t>...> sFormat, args_t&&... args);
 
  211     template<
class... args_t>
 
  212         requires format_acceptable_args_c<char_t, args_t...>
 
  214         const format_string_type<std::type_identity_t<args_t>...> sFormat,
 
  224     template<
class... args_t>
 
  225         requires format_acceptable_args_c<char_t, args_t...>
 
  226     void append_format(
const format_string_type<std::type_identity_t<args_t>...> sFormat, args_t&&... args);
 
  235     template<
class... args_t>
 
  236         requires format_acceptable_args_c<char_t, args_t...>
 
  237     void vformat(string_view svFormat, args_t&&... args);
 
  247     template<
class... args_t>
 
  248         requires format_acceptable_args_c<char_t, args_t...>
 
  258     template<
class... args_t>
 
  259         requires format_acceptable_args_c<char_t, args_t...>
 
  273     size_type 
reserve(size_type nCapacity) noexcept;
 
  283     void free() noexcept;
 
  291     string_view 
substr(size_type nPos, size_type nSymbols = npos) const noexcept;
 
  307     value_type 
front() const noexcept;
 
  313     value_type 
back() const noexcept;
 
  320     size_type 
length() const noexcept;
 
  326     const_pointer 
c_str() const noexcept;
 
  332     size_type 
capacity() const noexcept;
 
  338     static constexpr size_type 
max_size() noexcept;
 
  352     std::optional<to_t> 
to(const_pointer pszFormat = 
nullptr) const noexcept;
 
  361     size_type 
copy(pointer pDest, size_type nCount, size_type nPos = 0) const noexcept;
 
  368     template<class from_t>
 
  369     void from(const from_t& data);
 
  377     template<class from_t>
 
  384     void append(value_type chSymbol) noexcept;
 
  391     void append(const_pointer pszStr, size_type nStrSize = npos) noexcept;
 
  405     template<class fwd_it_t>
 
  406     void append(fwd_it_t itBegin, fwd_it_t itEnd) noexcept;
 
  413     template<range_of_t_c<char_t> string_t>
 
  414     void append(const string_t& sStr) noexcept;
 
  422     size_type 
insert(size_type nPos, value_type chSymbol) noexcept;
 
  431     size_type 
insert(size_type nPos, const_pointer pszWhat, size_type nSymbols = npos) noexcept;
 
  449     template<class fwd_it_t>
 
  450     size_type 
insert(size_type nPos, fwd_it_t itWhatBegin, fwd_it_t itWhatEnd) noexcept;
 
  459     template<range_of_t_c<char_t> string_t>
 
  460     size_type 
insert(size_type nPos, string_t sWhat) noexcept;
 
  477     size_type 
insert(
const_iterator itPos, const_pointer pszWhat, size_type nSymbols = npos) noexcept;
 
  495     template<class fwd_it_t>
 
  505     template<range_of_t_c<char_t> string_t>
 
  512     void push_back(value_type chSymbol) noexcept;
 
  518     void push_front(value_type chSymbol) noexcept;
 
  537     void erase(size_type nPos) noexcept;
 
  544     void erase(size_type nPos, size_type nSymbols) noexcept;
 
  569     size_type 
trim_left(value_type chSymbol) noexcept;
 
  576     size_type 
trim_left(const_pointer pszStr) noexcept;
 
  584     size_type 
trim_left(const_pointer pszStr, size_type nStrSize) noexcept;
 
  600     template<class fwd_it_t>
 
  601     size_type 
trim_left(fwd_it_t itBegin, fwd_it_t itEnd) noexcept;
 
  609     template<range_of_t_c<char_t> string_t>
 
  610     size_type 
trim_left(const string_t& sStr) noexcept;
 
  623     size_type 
trim_right(value_type chSymbol) noexcept;
 
  630     size_type 
trim_right(const_pointer pszStr) noexcept;
 
  638     size_type 
trim_right(const_pointer pszStr, size_type nStrSize) noexcept;
 
  654     template<class fwd_it_t>
 
  655     size_type 
trim_right(fwd_it_t itBegin, fwd_it_t itEnd) noexcept;
 
  663     template<range_of_t_c<char_t> string_t>
 
  664     size_type 
trim_right(const string_t& sStr) noexcept;
 
  670     size_type 
trim() noexcept;
 
  677     size_type 
trim(value_type chSymbol) noexcept;
 
  684     size_type 
trim(const_pointer pszStr) noexcept;
 
  692     size_type 
trim(const_pointer pszStr, size_type nStrSize) noexcept;
 
  708     template<class fwd_it_t>
 
  709     size_type 
trim(fwd_it_t itBegin, fwd_it_t itEnd) noexcept;
 
  717     template<range_of_t_c<char_t> string_t>
 
  718     size_type 
trim(const string_t& sStr) noexcept;
 
  727     size_type 
remove(value_type chSymbol, size_type nBegin = 0, size_type nEnd = npos) noexcept;
 
  738         const_pointer pszStr,
 
  739         size_type     nBegin   = 0,
 
  740         size_type     nEnd     = npos,
 
  741         size_type     nStrSize = npos) noexcept;
 
  750     size_type 
remove(const 
basic_string& sStr, size_type nBegin = 0, size_type nEnd = npos) noexcept;
 
  761     template<class fwd_it_t>
 
  762     size_type 
remove(fwd_it_t itBegin, fwd_it_t itEnd, size_type nBegin = 0, size_type nEnd = npos) noexcept;
 
  772     template<range_of_t_c<char_t> string_t>
 
  773     size_type 
remove(const string_t& sStr, size_type nBegin = 0, size_type nEnd = npos) noexcept;
 
  788     bool remove_prefix(const_pointer pszStr, size_type nStrSize = npos) noexcept;
 
  804     template<class fwd_it_t>
 
  805     bool remove_prefix(fwd_it_t itBegin, fwd_it_t itEnd) noexcept;
 
  813     template<range_of_t_c<char_t> string_t>
 
  829     bool remove_suffix(const_pointer pszStr, size_type nStrSize = npos) noexcept;
 
  845     template<class fwd_it_t>
 
  846     bool remove_suffix(fwd_it_t itBegin, fwd_it_t itEnd) noexcept;
 
  854     template<range_of_t_c<char_t> string_t>
 
  864     size_type 
remove_all(value_type chSymbol, size_type nBegin = 0, size_type nEnd = npos) noexcept;
 
  875         const_pointer pszStr,
 
  876         size_type     nBegin   = 0,
 
  877         size_type     nEnd     = npos,
 
  878         size_type     nStrSize = npos) noexcept;
 
  898     template<class fwd_it_t>
 
  899     size_type 
remove_all(fwd_it_t itFirst, fwd_it_t itLast, size_type nBegin = 0, size_type nEnd = npos) noexcept;
 
  909     template<range_of_t_c<char_t> string_t>
 
  910     size_type 
remove_all(const string_t& sStr, size_type nBegin = 0, size_type nEnd = npos) noexcept;
 
  921     size_type 
replace(size_type nBegin, size_type nSize, const_pointer pszReplace, 
size_t nReplaceSize) noexcept;
 
  932     template<class replace_string_t>
 
  933     size_type 
replace(size_type nBegin, size_type nSize, const replace_string_t& sReplace) noexcept;
 
  945     template<class find_string_t, class replace_string_t>
 
  947         const find_string_t&    sFind,
 
  948         const replace_string_t& sReplace,
 
  949         size_type               nBegin = 0,
 
  950         size_type               nEnd   = npos) noexcept;
 
  962     template<class find_string_t, class replace_string_t>
 
  964         const find_string_t&    sFind,
 
  965         const replace_string_t& sReplace,
 
  966         size_type               nBegin = 0,
 
  967         size_type               nEnd   = npos) noexcept;
 
  978     int compare(value_type chSymbol) const noexcept;
 
  989     int compare(const_pointer pszStr) const noexcept;
 
 1001     int compare(const_pointer pStr, size_type nStrSize) const noexcept;
 
 1025     template<class fwd_it_t>
 
 1026     int compare(fwd_it_t itBegin, fwd_it_t itEnd) const noexcept;
 
 1038     template<range_of_t_c<char_t> string_t>
 
 1039     int compare(const string_t& sStr) const noexcept;
 
 1048     size_type 
find(value_type chSymbol, size_type nBegin = 0, size_type nEnd = npos) const noexcept;
 
 1058     size_type 
find(const_pointer pszWhat, size_type nBegin = 0, size_type nWhatSize = npos, size_type nEnd = npos)
 
 1068     size_type 
find(const 
basic_string& sWhat, size_type nBegin = 0, size_type nEnd = npos) const noexcept;
 
 1079     template<class fwd_it_t>
 
 1080     size_type 
find(fwd_it_t itWhatBegin, fwd_it_t itWhatEnd, size_type nBegin = 0, size_type nEnd = npos)
 
 1091     template<range_of_t_c<char_t> string_t>
 
 1092     size_type 
find(string_t sWhat, size_type nBegin = 0, size_type nEnd = npos) const noexcept;
 
 1102     size_type 
rfind(value_type chSymbol, size_type nBegin = npos, size_type nEnd = 0) const noexcept;
 
 1113     size_type 
rfind(const_pointer pszWhat, size_type nBegin = npos, size_type nWhatSize = npos, size_type nEnd = 0)
 
 1124     size_type 
rfind(const 
basic_string& sWhat, size_type nBegin = npos, size_type nEnd = 0) const noexcept;
 
 1136     template<class fwd_it_t>
 
 1137     size_type 
rfind(fwd_it_t itWhatBegin, fwd_it_t itWhatEnd, size_type nBegin = npos, size_type nEnd = 0)
 
 1149     template<range_of_t_c<char_t> string_t>
 
 1150     size_type 
rfind(string_t sWhat, size_type nBegin = npos, size_type nEnd = 0) const noexcept;
 
 1158     size_type 
find_first_of(value_type chSymbol, size_type nBegin = 0) const noexcept;
 
 1167     size_type 
find_first_of(const_pointer pszWhat, size_type nBegin, size_type nWhatSize) const noexcept;
 
 1175     size_type 
find_first_of(const_pointer pszWhat, size_type nBegin = 0) const noexcept;
 
 1193     template<class fwd_it_t>
 
 1194     size_type 
find_first_of(fwd_it_t itWhatBegin, fwd_it_t itWhatEnd, size_type nBegin = 0) const noexcept;
 
 1203     template<range_of_t_c<char_t> string_t>
 
 1204     size_type 
find_first_of(string_t sWhat, size_type nBegin = 0) const noexcept;
 
 1212     size_type 
find_last_of(value_type chSymbol, size_type nEnd = 0) const noexcept;
 
 1221     size_type 
find_last_of(const_pointer pszWhat, size_type nEnd, size_type nWhatSize) const noexcept;
 
 1229     size_type 
find_last_of(const_pointer pszWhat, size_type nEnd = 0) const noexcept;
 
 1247     template<class fwd_it_t>
 
 1248     size_type 
find_last_of(fwd_it_t itWhatBegin, fwd_it_t itWhatEnd, size_type nEnd = 0) const noexcept;
 
 1257     template<range_of_t_c<char_t> string_t>
 
 1258     size_type 
find_last_of(string_t sWhat, size_type nEnd = 0) const noexcept;
 
 1266     size_type 
find_first_not_of(value_type chSymbol, size_type nBegin = 0) const noexcept;
 
 1275     size_type 
find_first_not_of(const_pointer pszWhat, size_type nBegin, size_type nWhatSize) const noexcept;
 
 1283     size_type 
find_first_not_of(const_pointer pszWhat, size_type nBegin = 0) const noexcept;
 
 1301     template<class fwd_it_t>
 
 1302     size_type 
find_first_not_of(fwd_it_t itWhatBegin, fwd_it_t itWhatEnd, size_type nBegin = 0) const noexcept;
 
 1311     template<range_of_t_c<char_t> string_t>
 
 1312     size_type 
find_first_not_of(string_t sWhat, size_type nBegin = 0) const noexcept;
 
 1320     size_type 
find_last_not_of(value_type chSymbol, size_type nEnd = 0) const noexcept;
 
 1329     size_type 
find_last_not_of(const_pointer pszWhat, size_type nEnd, size_type nWhatSize) const noexcept;
 
 1337     size_type 
find_last_not_of(const_pointer pszWhat, size_type nEnd = 0) const noexcept;
 
 1355     template<class fwd_it_t>
 
 1356     size_type 
find_last_not_of(fwd_it_t itWhatBegin, fwd_it_t itWhatEnd, size_type nEnd = 0) const noexcept;
 
 1365     template<range_of_t_c<char_t> string_t>
 
 1366     size_type 
find_last_not_of(string_t sWhat, size_type nEnd = 0) const noexcept;
 
 1373     views 
split(const value_type chSeparator) const noexcept;
 
 1381     views 
split(const_pointer pszSeparator, size_type nSepLen = npos) const noexcept;
 
 1397     template<class fwd_it_t>
 
 1398     views 
split(fwd_it_t itSepFirst, fwd_it_t itSepLast) const noexcept;
 
 1406     template<range_of_t_c<char_t> string_t>
 
 1407     views 
split(const string_t& sSeparator) const noexcept;
 
 1414     bool starts_with(value_type chSymbol) const noexcept;
 
 1422     bool starts_with(const_pointer pszStr, size_type nStrSize = npos) const noexcept;
 
 1438     template<class fwd_it_t>
 
 1439     bool starts_with(fwd_it_t itBegin, fwd_it_t itEnd) const noexcept;
 
 1447     template<range_of_t_c<char_t> string_t>
 
 1448     bool starts_with(const string_t& sStr) const noexcept;
 
 1455     bool ends_with(value_type chSymbol) const noexcept;
 
 1463     bool ends_with(const_pointer pszStr, size_type nStrSize = npos) const noexcept;
 
 1479     template<class fwd_it_t>
 
 1480     bool ends_with(fwd_it_t itBegin, fwd_it_t itEnd) const noexcept;
 
 1488     template<range_of_t_c<char_t> string_t>
 
 1489     bool ends_with(const string_t& sStr) const noexcept;
 
 1497     bool contains(value_type chSymbol) const noexcept;
 
 1506     bool contains(const_pointer pszStr, size_type nStrSize = npos) const noexcept;
 
 1524     template<class fwd_it_t>
 
 1525     bool contains(fwd_it_t itBegin, fwd_it_t itEnd) const noexcept;
 
 1534     template<range_of_t_c<char_t> string_t>
 
 1535     bool contains(const string_t& sStr) const noexcept;
 
 1537     basic_string& operator=(const_pointer pszSource) noexcept;
 
 1540     template<range_of_t_c<char_t> string_t>
 
 1541     basic_string& operator=(const string_t& sStr) noexcept;
 
 1543     basic_string& operator+=(value_type chSymbol) noexcept;
 
 1544     basic_string& operator+=(const_pointer pszSource) noexcept;
 
 1546     template<range_of_t_c<char_t> string_t>
 
 1547     basic_string& operator+=(const string_t& sStr) noexcept;
 
 1549     bool operator==(value_type chSymbol) const noexcept;
 
 1550     bool operator==(const_pointer pszSource) const noexcept;
 
 1551     bool operator==(const 
basic_string& sStr) const noexcept;
 
 1552     template<range_of_t_c<char_t> string_t>
 
 1553     bool operator==(const string_t& sStr) const noexcept;
 
 1555     bool operator!=(value_type chSymbol) const noexcept;
 
 1556     bool operator!=(const_pointer pszSource) const noexcept;
 
 1557     bool operator!=(const 
basic_string& sStr) const noexcept;
 
 1558     template<range_of_t_c<char_t> string_t>
 
 1559     bool operator!=(const string_t& sStr) const noexcept;
 
 1561     bool operator<(value_type chSymbol) const noexcept;
 
 1562     bool operator<(const_pointer pszSource) const noexcept;
 
 1563     bool operator<(const 
basic_string& sStr) const noexcept;
 
 1564     template<range_of_t_c<char_t> string_t>
 
 1565     bool operator<(const string_t& sStr) const noexcept;
 
 1567     bool operator<=(value_type chSymbol) const noexcept;
 
 1568     bool operator<=(const_pointer pszSource) const noexcept;
 
 1569     bool operator<=(const 
basic_string& sStr) const noexcept;
 
 1570     template<range_of_t_c<char_t> string_t>
 
 1571     bool operator<=(const string_t& sStr) const noexcept;
 
 1573     bool operator>(value_type chSymbol) const noexcept;
 
 1574     bool operator>(const_pointer pszSource) const noexcept;
 
 1575     bool operator>(const 
basic_string& sStr) const noexcept;
 
 1576     template<range_of_t_c<char_t> string_t>
 
 1577     bool operator>(const string_t& sStr) const noexcept;
 
 1579     bool operator>=(value_type chSymbol) const noexcept;
 
 1580     bool operator>=(const_pointer pszSource) const noexcept;
 
 1581     bool operator>=(const 
basic_string& sStr) const noexcept;
 
 1582     template<range_of_t_c<char_t> string_t>
 
 1583     bool operator>=(const string_t& sStr) const noexcept;
 
 1585     reference       operator[](size_type nSymbol) noexcept;
 
 1586     const_reference operator[](size_type nSymbol) const noexcept;
 
 1588     operator string_view() const noexcept;
 
 1590     explicit operator 
bool() const noexcept;
 
 1600     bool _resize(size_type nSymbols, string_resize_type eType = string_resize_type::common) noexcept;
 
 1608     template<class searcher_t>
 
 1609     size_type _trim_left(const searcher_t& searcher) noexcept;
 
 1617     template<class searcher_t>
 
 1618     size_type _trim_right(const searcher_t& searcher) noexcept;
 
 1626     template<class searcher_t>
 
 1627     size_type _trim(const searcher_t& searcher) noexcept;
 
 1637     template<class comparator_t>
 
 1638     size_type _find(size_type nBegin, size_type nEnd, const comparator_t& comparator) const noexcept;
 
 1648     template<class comparator_t>
 
 1649     size_type _rfind(size_type nBegin, size_type nEnd, const comparator_t& comparator) const noexcept;
 
 1661     template<class incrementer_t, class fwd_it_t>
 
 1662     size_type _find_first_of(fwd_it_t itBegin, fwd_it_t itEnd, size_type nBegin, const incrementer_t& incrementer)
 
 1675     template<class incrementer_t, class fwd_it_t>
 
 1676     size_type _find_last_of(fwd_it_t itBegin, fwd_it_t itEnd, size_type nEnd, const incrementer_t& incrementer)
 
 1689     template<class incrementer_t, class fwd_it_t>
 
 1690     size_type _find_first_not_of(fwd_it_t itBegin, fwd_it_t itEnd, size_type nBegin, const incrementer_t& incrementer)
 
 1703     template<class incrementer_t, class fwd_it_t>
 
 1704     size_type _find_last_not_of(fwd_it_t itBegin, fwd_it_t itEnd, size_type nEnd, const incrementer_t& incrementer)
 
 1713     template<class string_view_like_t>
 
 1714     static size_type _get_string_view_like_size(const string_view_like_t& sValue) noexcept;
 
 1722     template<class string_view_like_t>
 
 1723     static const_pointer _get_string_view_like_data(const string_view_like_t& sValue) noexcept;
 
 1737 template<class T, class char_t = char_type, class traits_t = string_traits::traits<char_t>>
 
 1738 basic_string<char_t, traits_t> convert_to_string(const T& value);
 
 1746 #include <qx/containers/string/string.inl> 
void push_back(value_type chSymbol) noexcept
Insert char in the end of the string.
 
void erase(iterator itFirst, iterator itLast) noexcept
Erase substring.
 
size_type find(value_type chSymbol, size_type nBegin=0, size_type nEnd=npos) const noexcept
Find substring.
 
bool remove_prefix(value_type chSymbol) noexcept
Remove string prefix if matches.
 
size_type remove_all(value_type chSymbol, size_type nBegin=0, size_type nEnd=npos) noexcept
Remove all occurrences of a substring in a string.
 
std::optional< to_t > to(const_pointer pszFormat=nullptr) const noexcept
Convert string to specified type.
 
int compare(value_type chSymbol) const noexcept
Performs a binary comparison of the characters.
 
size_type find_last_of(value_type chSymbol, size_type nEnd=0) const noexcept
Find last position of character.
 
void push_front(value_type chSymbol) noexcept
Insert char in the beginning of the string.
 
size_type capacity() const noexcept
Get allocated memory size (including null terminator)
 
value_type pop_back() noexcept
Erase last char and return it.
 
size_type copy(pointer pDest, size_type nCount, size_type nPos=0) const noexcept
Copies a substring [nPos, nPos + nCount) to character string pointed to by pDest.
 
views split(const value_type chSeparator) const noexcept
Split string by separator.
 
size_type rfind(value_type chSymbol, size_type nBegin=npos, size_type nEnd=0) const noexcept
Find substring (reverse direction)
 
size_type length() const noexcept
Get string length.
 
void free() noexcept
Clear string and free allocated memory.
 
void from(const from_t &data)
Construct string from custom type.
 
size_type trim_right() noexcept
Trim the string to the right (whitespace characters)
 
requires format_acceptable_args_c< char_t, args_t... > void vformat(string_view svFormat, args_t &&... args)
Clear the string and format it with the format string and the args.
 
void assign(size_type nSymbols, value_type chSymbol) noexcept
Assign by filling.
 
size_type replace_all(const find_string_t &sFind, const replace_string_t &sReplace, size_type nBegin=0, size_type nEnd=npos) noexcept
Replace all occurrences of sFind with sReplace.
 
bool ends_with(value_type chSymbol) const noexcept
Check if current string ends with char.
 
void swap(basic_string &sOther) noexcept
Swap this str and other.
 
value_type pop_front() noexcept
Erase first char and return it.
 
void append(value_type chSymbol) noexcept
Append char.
 
size_type trim() noexcept
Trim the string to the both sides (whitespace characters)
 
void to_upper() noexcept
Convert string to uppercase.
 
void shrink_to_fit() noexcept
Fit allocated size to string's actual size.
 
static basic_string static_from(const from_t &data)
Construct string from custom type and get it.
 
size_type find_last_not_of(value_type chSymbol, size_type nEnd=0) const noexcept
Finds the last character not equal to chSymbol.
 
size_type trim_left() noexcept
Trim the string to the left (whitespace characters)
 
size_type reserve(size_type nCapacity) noexcept
Reserve memory for the string.
 
requires format_acceptable_args_c< char_t, args_t... > void append_vformat(string_view svFormat, args_t &&... args)
Append the formatted string to the current one.
 
string_view substr(size_type nPos, size_type nSymbols=npos) const noexcept
Get substring.
 
requires format_acceptable_args_c< char_t, args_t... > void append_format(const format_string_type< std::type_identity_t< args_t >... > sFormat, args_t &&... args)
Append the formatted string to the current one.
 
void to_lower() noexcept
Convert string to lowercase.
 
requires format_acceptable_args_c< char_t, args_t... > void format(const format_string_type< std::type_identity_t< args_t >... > sFormat, args_t &&... args)
Clear the string and format it with the format string and the args.
 
size_type insert(size_type nPos, value_type chSymbol) noexcept
Insert substring.
 
bool remove_suffix(value_type chSymbol) noexcept
Remove string suffix if matches.
 
const_pointer c_str() const noexcept
Get pointer to string zero terminated.
 
requires static format_acceptable_args_c< char_t, args_t... > basic_string static_vformat(string_view svFormat, args_t &&... args)
Create a string by formatting it with the format string and the args.
 
size_type remove(value_type chSymbol, size_type nBegin=0, size_type nEnd=npos) noexcept
Remove the first occurrence of a substring in a string.
 
static constexpr size_type max_size() noexcept
Get the theoretical maximum of string size.
 
bool starts_with(value_type chSymbol) const noexcept
Check if current string starts with char.
 
value_type front() const noexcept
Get first char of the string.
 
value_type back() const noexcept
Get last char of the string.
 
requires static format_acceptable_args_c< char_t, args_t... > basic_string static_format(const format_string_type< std::type_identity_t< args_t >... > sFormat, args_t &&... args)
Create a string by formatting it with the format string and the args.
 
size_type replace(size_type nBegin, size_type nSize, const_pointer pszReplace, size_t nReplaceSize) noexcept
Replace a substring with a given string.
 
size_type find_first_of(value_type chSymbol, size_type nBegin=0) const noexcept
Find first position of character.
 
size_type find_first_not_of(value_type chSymbol, size_type nBegin=0) const noexcept
Finds the first character not equal to chSymbol.
 
Const random access iterator type.
 
Non-const random access iterator type.
 
requires(same_variadic_args_v< args_t... >) const expr auto coalesce(args_t &&... args)
Coalesce function, C# a ?? b analogue.
 
Check that tuple type contains T.