@@ -1013,10 +1013,47 @@ string_nodiscard std::size_t find_first( std17::basic_string_view<CharT> text, S
10131013
10141014//  ends_with_all_of()
10151015
1016+ # define  string_MK_ENDS_WITH_ALL_OF (CharT )          \
1017+     string_nodiscard inline  bool                     \
1018+     ends_with_all_of ( std17::basic_string_view<CharT> text, std17::basic_string_view<CharT> set )  \
1019+     {                                               \
1020+         if  ( text.empty () )                         \
1021+             return  false ;                           \
1022+                                                     \
1023+         std::basic_string<CharT> result;            \
1024+                                                     \
1025+         for  ( auto  it = text.crbegin (); it != text.crend (); ++it )  \
1026+         {                                           \
1027+             auto  const  chr = *it;                   \
1028+             if  ( !contains ( set, chr ) )            \
1029+                 break ;                              \
1030+             if  ( !contains ( result, chr ) )         \
1031+                 result.append ( 1 , chr );            \
1032+         }                                           \
1033+         return  contains_all_of ( result, set );      \
1034+     }
1035+ 
10161036//  ends_with_any_of()
10171037
1038+ # define  string_MK_ENDS_WITH_ANY_OF (CharT )          \
1039+     string_nodiscard inline  bool                     \
1040+     ends_with_any_of ( std17::basic_string_view<CharT> text, std17::basic_string_view<CharT> set )  \
1041+     {                                               \
1042+         if  ( text.empty () )                         \
1043+             return  false ;                           \
1044+                                                     \
1045+         return  contains ( set, *text.crbegin () );    \
1046+     }
1047+ 
10181048//  ends_with_none_of()
10191049
1050+ # define  string_MK_ENDS_WITH_NONE_OF (CharT )         \
1051+     string_nodiscard inline  bool                     \
1052+     ends_with_none_of ( std17::basic_string_view<CharT> text, std17::basic_string_view<CharT> set )  \
1053+     {                                               \
1054+         return  !ends_with_any_of ( text, set );      \
1055+     }
1056+ 
10201057// 
10211058//  Modifiers:
10221059// 
@@ -1879,11 +1916,14 @@ string_MK_CONTAINS_ANY_OF    ( char )
18791916string_MK_CONTAINS_NONE_OF   ( char  )
18801917string_MK_STARTS_WITH        ( char  )
18811918string_MK_STARTS_WITH_CHAR   ( char  )
1919+ string_MK_STARTS_WITH_ALL_OF ( char  )
18821920string_MK_STARTS_WITH_ANY_OF ( char  )
18831921string_MK_STARTS_WITH_NONE_OF( char  )
1884- string_MK_STARTS_WITH_ALL_OF ( char  )
18851922string_MK_ENDS_WITH          ( char  )
18861923string_MK_ENDS_WITH_CHAR     ( char  )
1924+ string_MK_ENDS_WITH_ALL_OF   ( char  )
1925+ string_MK_ENDS_WITH_ANY_OF   ( char  )
1926+ string_MK_ENDS_WITH_NONE_OF  ( char  )
18871927string_MK_ERASE              ( char  )
18881928string_MK_ERASE_ALL          ( char  )
18891929string_MK_ERASE_FIRST        ( char  )
@@ -1924,11 +1964,14 @@ string_MK_CONTAINS_ANY_OF    ( wchar_t )
19241964string_MK_CONTAINS_NONE_OF   ( wchar_t  )
19251965string_MK_STARTS_WITH        ( wchar_t  )
19261966string_MK_STARTS_WITH_CHAR   ( wchar_t  )
1967+ string_MK_STARTS_WITH_ALL_OF ( wchar_t  )
19271968string_MK_STARTS_WITH_ANY_OF ( wchar_t  )
19281969string_MK_STARTS_WITH_NONE_OF( wchar_t  )
1929- string_MK_STARTS_WITH_ALL_OF ( wchar_t  )
19301970string_MK_ENDS_WITH          ( wchar_t  )
19311971string_MK_ENDS_WITH_CHAR     ( wchar_t  )
1972+ string_MK_ENDS_WITH_ALL_OF   ( wchar_t  )
1973+ string_MK_ENDS_WITH_ANY_OF   ( wchar_t  )
1974+ string_MK_ENDS_WITH_NONE_OF  ( wchar_t  )
19321975string_MK_FIND_FIRST         ( wchar_t  )
19331976string_MK_FIND_FIRST_CHAR    ( wchar_t  )
19341977string_MK_FIND_LAST          ( wchar_t  )
@@ -1977,11 +2020,14 @@ string_MK_CONTAINS_ANY_OF    ( char8_t )
19772020string_MK_CONTAINS_NONE_OF   ( char8_t  )
19782021string_MK_STARTS_WITH        ( char8_t  )
19792022string_MK_STARTS_WITH_CHAR   ( char8_t  )
2023+ string_MK_STARTS_WITH_ALL_OF ( char8_t  )
19802024string_MK_STARTS_WITH_ANY_OF ( char8_t  )
19812025string_MK_STARTS_WITH_NONE_OF( char8_t  )
1982- string_MK_STARTS_WITH_ALL_OF ( char8_t  )
19832026string_MK_ENDS_WITH          ( char8_t  )
19842027string_MK_ENDS_WITH_CHAR     ( char8_t  )
2028+ string_MK_ENDS_WITH_ALL_OF   ( char8_t  )
2029+ string_MK_ENDS_WITH_ANY_OF   ( char8_t  )
2030+ string_MK_ENDS_WITH_NONE_OF  ( char8_t  )
19852031string_MK_FIND_FIRST         ( char8_t  )
19862032string_MK_FIND_FIRST_CHAR    ( char8_t  )
19872033string_MK_FIND_LAST          ( char8_t  )
@@ -2030,11 +2076,14 @@ string_MK_CONTAINS_ANY_OF    ( char16_t )
20302076string_MK_CONTAINS_NONE_OF   ( char16_t  )
20312077string_MK_STARTS_WITH        ( char16_t  )
20322078string_MK_STARTS_WITH_CHAR   ( char16_t  )
2079+ string_MK_STARTS_WITH_ALL_OF ( char16_t  )
20332080string_MK_STARTS_WITH_ANY_OF ( char16_t  )
20342081string_MK_STARTS_WITH_NONE_OF( char16_t  )
2035- string_MK_STARTS_WITH_ALL_OF ( char16_t  )
20362082string_MK_ENDS_WITH          ( char16_t  )
20372083string_MK_ENDS_WITH_CHAR     ( char16_t  )
2084+ string_MK_ENDS_WITH_ALL_OF   ( char16_t  )
2085+ string_MK_ENDS_WITH_ANY_OF   ( char16_t  )
2086+ string_MK_ENDS_WITH_NONE_OF  ( char16_t  )
20382087string_MK_FIND_FIRST         ( char16_t  )
20392088string_MK_FIND_FIRST_CHAR    ( char16_t  )
20402089string_MK_FIND_LAST          ( char16_t  )
@@ -2083,11 +2132,14 @@ string_MK_CONTAINS_ANY_OF    ( char32_t )
20832132string_MK_CONTAINS_NONE_OF   ( char32_t  )
20842133string_MK_STARTS_WITH        ( char32_t  )
20852134string_MK_STARTS_WITH_CHAR   ( char32_t  )
2135+ string_MK_STARTS_WITH_ALL_OF ( char32_t  )
20862136string_MK_STARTS_WITH_ANY_OF ( char32_t  )
20872137string_MK_STARTS_WITH_NONE_OF( char32_t  )
2088- string_MK_STARTS_WITH_ALL_OF ( char32_t  )
20892138string_MK_ENDS_WITH          ( char32_t  )
20902139string_MK_ENDS_WITH_CHAR     ( char32_t  )
2140+ string_MK_ENDS_WITH_ALL_OF   ( char32_t  )
2141+ string_MK_ENDS_WITH_ANY_OF   ( char32_t  )
2142+ string_MK_ENDS_WITH_NONE_OF  ( char32_t  )
20912143string_MK_FIND_FIRST         ( char32_t  )
20922144string_MK_FIND_FIRST_CHAR    ( char32_t  )
20932145string_MK_FIND_LAST          ( char32_t  )
@@ -2136,11 +2188,14 @@ string_MK_SPLIT_LEFT_STRING  ( char32_t )
21362188#undef  string_MK_CONTAINS_NONE_OF
21372189#undef  string_MK_STARTS_WITH
21382190#undef  string_MK_STARTS_WITH_CHAR
2191+ #undef  string_MK_STARTS_WITH_ALL_OF
21392192#undef  string_MK_STARTS_WITH_ANY_OF
21402193#undef  string_MK_STARTS_WITH_NONE_OF
2141- #undef  string_MK_STARTS_WITH_ALL_OF
21422194#undef  string_MK_ENDS_WITH
21432195#undef  string_MK_ENDS_WITH_CHAR
2196+ #undef  string_MK_ENDS_WITH_ALL_OF
2197+ #undef  string_MK_ENDS_WITH_ANY_OF
2198+ #undef  string_MK_ENDS_WITH_NONE_OF
21442199#undef  string_MK_FIND_FIRST
21452200#undef  string_MK_FIND_FIRST_CHAR
21462201#undef  string_MK_FIND_LAST
0 commit comments