diff --git a/include/etl/basic_string.h b/include/etl/basic_string.h index d7f139d5..40a8d0db 100644 --- a/include/etl/basic_string.h +++ b/include/etl/basic_string.h @@ -54,6 +54,10 @@ SOFTWARE. #include #endif +#if ETL_USING_STL + #include +#endif + #include "private/minmax_push.h" //***************************************************************************** @@ -2962,6 +2966,23 @@ namespace etl { return !(lhs < rhs); } + + //*************************************************************************** + /// Operator overload to write to std basic_ostream + ///\param os Reference to the output stream. + ///\param str Reference to the string to write. + ///\return Reference to the output stream, for chaining write operations. + ///\ingroup string + //*************************************************************************** +#if ETL_USING_STL + template + std::basic_ostream > &operator<<(std::basic_ostream > &os, + const etl::ibasic_string& str) + { + os.write(str.data(), str.size()); + return os; + } +#endif } #include "private/minmax_pop.h" diff --git a/include/etl/string_view.h b/include/etl/string_view.h index 82bd4502..69cbe836 100644 --- a/include/etl/string_view.h +++ b/include/etl/string_view.h @@ -47,6 +47,10 @@ SOFTWARE. #include #endif +#if ETL_USING_STL + #include +#endif + #include namespace etl @@ -972,6 +976,19 @@ void swap(etl::basic_string_view >& lhs, etl::basic_strin lhs.swap(rhs); } +//************************************************************************* +/// Operator overload to write to std basic_ostream +//************************************************************************* +#if ETL_USING_STL +template +std::basic_ostream > &operator<<(std::basic_ostream > &os, + etl::basic_string_view > text) +{ + os.write(text.data(), text.size()); + return os; +} +#endif + #include "private/minmax_pop.h" #endif diff --git a/test/test_string_char.cpp b/test/test_string_char.cpp index 9a4f463c..55e1bdb3 100644 --- a/test/test_string_char.cpp +++ b/test/test_string_char.cpp @@ -5310,5 +5310,23 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + Text text1 = STR("Hello World"); + + std::stringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_char_external_buffer.cpp b/test/test_string_char_external_buffer.cpp index 1234e170..a2593660 100644 --- a/test/test_string_char_external_buffer.cpp +++ b/test/test_string_char_external_buffer.cpp @@ -5689,5 +5689,24 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + TextBuffer buffer1{0}; + Text text1(STR("Hello World"), buffer1.data(), buffer1.size()); + + std::stringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_u16.cpp b/test/test_string_u16.cpp index d2cb002b..01ee5cf8 100644 --- a/test/test_string_u16.cpp +++ b/test/test_string_u16.cpp @@ -5324,5 +5324,23 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + Text text1 = STR("Hello World"); + + std::basic_stringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_u16_external_buffer.cpp b/test/test_string_u16_external_buffer.cpp index b7a2bfec..ab7223e7 100644 --- a/test/test_string_u16_external_buffer.cpp +++ b/test/test_string_u16_external_buffer.cpp @@ -5677,5 +5677,24 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + TextBuffer buffer1{0}; + Text text1(STR("Hello World"), buffer1.data(), buffer1.size()); + + std::basic_stringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_u32.cpp b/test/test_string_u32.cpp index 4c19a57d..4f4c6cb0 100644 --- a/test/test_string_u32.cpp +++ b/test/test_string_u32.cpp @@ -5324,5 +5324,23 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + Text text1 = STR("Hello World"); + + std::basic_stringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_u32_external_buffer.cpp b/test/test_string_u32_external_buffer.cpp index 5e808726..1187091f 100644 --- a/test/test_string_u32_external_buffer.cpp +++ b/test/test_string_u32_external_buffer.cpp @@ -5677,5 +5677,24 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + TextBuffer buffer1{0}; + Text text1(STR("Hello World"), buffer1.data(), buffer1.size()); + + std::basic_stringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_u8.cpp b/test/test_string_u8.cpp index 4f792225..e105ed19 100644 --- a/test/test_string_u8.cpp +++ b/test/test_string_u8.cpp @@ -5327,6 +5327,24 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + Text text1 = STR("Hello World"); + + std::basic_stringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_u8_external_buffer.cpp b/test/test_string_u8_external_buffer.cpp index df2724e5..1494e708 100644 --- a/test/test_string_u8_external_buffer.cpp +++ b/test/test_string_u8_external_buffer.cpp @@ -5706,6 +5706,25 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + TextBuffer buffer1{0}; + Text text1(STR("Hello World"), buffer1.data(), buffer1.size()); + + std::basic_stringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_view.cpp b/test/test_string_view.cpp index afa1e6d3..598f6332 100644 --- a/test/test_string_view.cpp +++ b/test/test_string_view.cpp @@ -1120,5 +1120,40 @@ namespace CHECK_TRUE((u16view == U16View{ u"Hello World", etl::strlen(u"Hello World") })); CHECK_TRUE((u32view == U32View{ U"Hello World", etl::strlen(U"Hello World") })); } + + //************************************************************************* +#if ETL_USING_STL + TEST(write_to_std_stream) + { + View view{ "Hello World" }; + WView wview{ L"Hello World" }; + U16View u16view{ u"Hello World" }; + U32View u32view{ U"Hello World" }; + + std::stringstream sstream; + std::wstringstream wsstream; + std::basic_stringstream u16sstream; + std::basic_stringstream u32sstream; + + sstream << view; + std::string sstream_string = sstream.str(); + wsstream << wview; + std::wstring wsstream_string = wsstream.str(); + u16sstream << u16view; + std::u16string u16sstream_string = u16sstream.str(); + u32sstream << u32view; + std::u32string u32sstream_string = u32sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + WView wsstream_view(wsstream_string.data(), wsstream_string.size()); + U16View u16sstream_view(u16sstream_string.data(), u16sstream_string.size()); + U32View u32sstream_view(u32sstream_string.data(), u32sstream_string.size()); + + CHECK_TRUE(view == sstream_view); + CHECK_TRUE(wview == wsstream_view); + CHECK_TRUE(u16view == u16sstream_view); + CHECK_TRUE(u32view == u32sstream_view); + } +#endif }; } diff --git a/test/test_string_wchar_t.cpp b/test/test_string_wchar_t.cpp index 4eb16f41..d28ba6d6 100644 --- a/test/test_string_wchar_t.cpp +++ b/test/test_string_wchar_t.cpp @@ -5325,5 +5325,23 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + Text text1 = STR("Hello World"); + + std::wstringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; } diff --git a/test/test_string_wchar_t_external_buffer.cpp b/test/test_string_wchar_t_external_buffer.cpp index 8bbbe496..16cc52a8 100644 --- a/test/test_string_wchar_t_external_buffer.cpp +++ b/test/test_string_wchar_t_external_buffer.cpp @@ -5680,5 +5680,24 @@ namespace #endif CHECK_EQUAL(text.max_size(), text.size()); } + + //************************************************************************* +#if ETL_USING_STL + TEST_FIXTURE(SetupFixture, test_write_string_to_std_basic_ostream) + { + TextBuffer buffer1{0}; + Text text1(STR("Hello World"), buffer1.data(), buffer1.size()); + + std::wstringstream sstream; + + sstream << text1; + + TextSTD sstream_string = sstream.str(); + + View sstream_view(sstream_string.data(), sstream_string.size()); + + CHECK(text1 == sstream_view); + } +#endif }; }