Skip to content

Commit b8970a3

Browse files
committed
Add default_strip_set (" \t\n") to strip(), strip_left(), strip_right()
1 parent af20710 commit b8970a3

File tree

2 files changed

+71
-19
lines changed

2 files changed

+71
-19
lines changed

include/nonstd/string.hpp

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -640,12 +640,16 @@ namespace detail {
640640
// Utilities:
641641
//
642642

643+
// null character:
644+
643645
template< typename CharT >
644646
string_nodiscard string_constexpr CharT nullchr() noexcept
645647
{
646648
return 0;
647649
}
648650

651+
// null C-string:
652+
649653
#if string_CONFIG_PROVIDE_CHAR_T
650654
string_nodiscard string_constexpr char const * nullstr( char ) noexcept
651655
{
@@ -681,6 +685,45 @@ string_nodiscard string_constexpr char32_t const * nullstr( char32_t ) noexcept
681685
}
682686
#endif
683687

688+
// default strip set:
689+
690+
#if string_CONFIG_PROVIDE_CHAR_T
691+
string_nodiscard inline char const * default_strip_set( char )
692+
{
693+
return " \t\n";
694+
}
695+
#endif
696+
697+
#if string_CONFIG_PROVIDE_WCHAR_T
698+
string_nodiscard string_constexpr wchar_t const * default_strip_set( wchar_t ) noexcept
699+
{
700+
return L" \t\n";
701+
}
702+
#endif
703+
704+
#if string_CONFIG_PROVIDE_CHAR8_T
705+
string_nodiscard string_constexpr char8_t const * default_strip_set( char8_t ) noexcept
706+
{
707+
return u8" \t\n";
708+
}
709+
#endif
710+
711+
#if string_CONFIG_PROVIDE_CHAR16_T
712+
string_nodiscard string_constexpr char16_t const * default_strip_set( char16_t ) noexcept
713+
{
714+
return u" \t\n";
715+
}
716+
#endif
717+
718+
#if string_CONFIG_PROVIDE_CHAR32_T
719+
string_nodiscard string_constexpr char32_t const * default_strip_set( char32_t ) noexcept
720+
{
721+
return U" \t\n";
722+
}
723+
#endif
724+
725+
// to_string(sv):
726+
684727
#if string_HAVE_STRING_VIEW
685728
#define MK_DETAIL_TO_STRING_SV(T) \
686729
string_nodiscard inline std::basic_string<T> \
@@ -1143,7 +1186,7 @@ string_nodiscard std::basic_string<CharT> to_case( std::basic_string<CharT> text
11431186
return result; \
11441187
}
11451188

1146-
// to_lowercase(), to_uppercase():
1189+
// to_lowercase(), to_uppercase()
11471190

11481191
// template string_nodiscard std::basic_string<CharT> to_lowercase( std17::basic_string_view<CharT> text ) string_noexcept;
11491192

@@ -1159,40 +1202,37 @@ string_nodiscard std::basic_string<CharT> to_case( std::basic_string<CharT> text
11591202
return detail::to_case( std::basic_string<CharT>(text), detail::to_ ## Function<CharT> ); \
11601203
}
11611204

1162-
// template< typename StringT >
1163-
// inline StringT const default_strip_set()
1164-
// {
1165-
// return " \t\n";
1166-
// }
1167-
11681205
// strip_left()
11691206

11701207
#define string_MK_STRIP_LEFT(CharT) \
1171-
template< typename SetT > \
1172-
string_nodiscard std::basic_string<CharT> \
1173-
strip_left( std17::basic_string_view<CharT> text, SetT const & set ) \
1208+
string_nodiscard inline std::basic_string<CharT> \
1209+
strip_left( \
1210+
std17::basic_string_view<CharT> text \
1211+
, std17::basic_string_view<CharT> set = detail::default_strip_set(CharT{}) ) \
11741212
{ \
11751213
return std::basic_string<CharT>( text ).erase( 0, text.find_first_not_of( set ) ); \
11761214
}
11771215

11781216
// strip_right()
11791217

11801218
#define string_MK_STRIP_RIGHT(CharT) \
1181-
template< typename SetT > \
1182-
string_nodiscard std::basic_string<CharT> \
1183-
strip_right( std17::basic_string_view<CharT> text, SetT const & set ) \
1219+
string_nodiscard inline std::basic_string<CharT> \
1220+
strip_right( \
1221+
std17::basic_string_view<CharT> text \
1222+
, std17::basic_string_view<CharT> set = detail::default_strip_set(CharT{}) ) \
11841223
{ \
11851224
return std::basic_string<CharT>( text ).erase( text.find_last_not_of( set ) + 1 ); \
11861225
}
11871226

11881227
// strip()
11891228

1190-
#define string_MK_STRIP(CharT) \
1191-
template< typename SetT > \
1192-
string_nodiscard std::basic_string<CharT> \
1193-
strip( std17::basic_string_view<CharT> text, SetT const & set ) \
1194-
{ \
1195-
return strip_left( strip_right( text, set ), set ); \
1229+
#define string_MK_STRIP(CharT) \
1230+
string_nodiscard inline std::basic_string<CharT> \
1231+
strip( \
1232+
std17::basic_string_view<CharT> text \
1233+
, std17::basic_string_view<CharT> set = detail::default_strip_set(CharT{}) ) \
1234+
{ \
1235+
return strip_left( strip_right( text, set ), set ); \
11961236
}
11971237

11981238
// erase_all()

test/string.t.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,15 +582,19 @@ CASE( "replace_last: string with last occurrence of substring replaced" )
582582

583583
CASE( "strip_left: string with characters in set removed from left of string [\" \\t\\n\"]" )
584584
{
585+
EXPECT( strip_left(" \t\nabc" ) == "abc" );
585586
EXPECT( strip_left(" \t\nabc", " \t\n") == "abc" );
586587
EXPECT( strip_left(" #$%&abc", " #$%&") == "abc" );
587588

589+
EXPECT( strip_left(std::string(" \t\nabc") ) == "abc" );
588590
EXPECT( strip_left(std::string(" \t\nabc"), std::string(" \t\n")) == "abc" );
589591
EXPECT( strip_left(std::string(" #$%&abc"), std::string(" #$%&")) == "abc" );
590592

593+
EXPECT( strip_left(std17::string_view(" \t\nabc") ) == "abc" );
591594
EXPECT( strip_left(std17::string_view(" \t\nabc"), std17::string_view(" \t\n")) == "abc" );
592595
EXPECT( strip_left(std17::string_view(" #$%&abc"), std17::string_view(" #$%&")) == "abc" );
593596

597+
EXPECT( strip_left(stringy(" \t\nabc") ) == "abc" );
594598
EXPECT( strip_left(stringy(" \t\nabc"), " \t\n") == "abc" );
595599
EXPECT( strip_left(stringy(" #$%&abc"), " #$%&") == "abc" );
596600
}
@@ -599,15 +603,19 @@ CASE( "strip_left: string with characters in set removed from left of string [\"
599603

600604
CASE( "strip_right: string with characters in set removed from right of string [\" \\t\\n\"]" )
601605
{
606+
EXPECT( strip_right(std::string("abc \t\n") ) == "abc" );
602607
EXPECT( strip_right(std::string("abc \t\n"), " \t\n") == "abc" );
603608
EXPECT( strip_right(std::string("abc #$%&"), " #$%&") == "abc" );
604609

610+
EXPECT( strip_right(std::string("abc \t\n") ) == "abc" );
605611
EXPECT( strip_right(std::string("abc \t\n"), std::string(" \t\n")) == "abc" );
606612
EXPECT( strip_right(std::string("abc #$%&"), std::string(" #$%&")) == "abc" );
607613

614+
EXPECT( strip_right(std17::string_view("abc \t\n") ) == "abc" );
608615
EXPECT( strip_right(std17::string_view("abc \t\n"), std17::string_view(" \t\n")) == "abc" );
609616
EXPECT( strip_right(std17::string_view("abc #$%&"), std17::string_view(" #$%&")) == "abc" );
610617

618+
EXPECT( strip_right(stringy("abc \t\n") ) == "abc" );
611619
EXPECT( strip_right(stringy("abc \t\n"), " \t\n") == "abc" );
612620
EXPECT( strip_right(stringy("abc #$%&"), " #$%&") == "abc" );
613621
}
@@ -616,15 +624,19 @@ CASE( "strip_right: string with characters in set removed from right of string [
616624

617625
CASE( "strip: string with characters in set removed from left and right of string [\" \\t\\n\"]" )
618626
{
627+
EXPECT( strip(" \t\nabc \t\n" ) == "abc" );
619628
EXPECT( strip(" \t\nabc \t\n", " \t\n") == "abc" );
620629
EXPECT( strip(" #$%&abc #$%&", " #$%&") == "abc" );
621630

631+
EXPECT( strip(std::string(" \t\nabc \t\n") ) == "abc" );
622632
EXPECT( strip(std::string(" \t\nabc \t\n"), std::string(" \t\n")) == "abc" );
623633
EXPECT( strip(std::string(" #$%&abc #$%&"), std::string(" #$%&")) == "abc" );
624634

635+
EXPECT( strip(std17::string_view(" \t\nabc \t\n") ) == "abc" );
625636
EXPECT( strip(std17::string_view(" \t\nabc \t\n"), std17::string_view(" \t\n")) == "abc" );
626637
EXPECT( strip(std17::string_view(" #$%&abc #$%&"), std17::string_view(" #$%&")) == "abc" );
627638

639+
EXPECT( strip(stringy(" \t\nabc \t\n") ) == "abc" );
628640
EXPECT( strip(stringy(" \t\nabc \t\n"), " \t\n") == "abc" );
629641
EXPECT( strip(stringy(" #$%&abc #$%&"), " #$%&") == "abc" );
630642
}

0 commit comments

Comments
 (0)