From 937542fcad0c9d7925d3bd669691ddbe83736744 Mon Sep 17 00:00:00 2001 From: Krystian Stasiowski Date: Mon, 16 Dec 2019 16:42:53 -0500 Subject: [PATCH] Added operator+ for operands of known size, more constexpr --- .../static_string/detail/static_string.hpp | 10 +- include/boost/static_string/static_string.hpp | 127 +++++++++++------- 2 files changed, 89 insertions(+), 48 deletions(-) diff --git a/include/boost/static_string/detail/static_string.hpp b/include/boost/static_string/detail/static_string.hpp index b5f1b26..5032c40 100644 --- a/include/boost/static_string/detail/static_string.hpp +++ b/include/boost/static_string/detail/static_string.hpp @@ -226,6 +226,7 @@ using optimization_base = #endif template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline int lexicographical_compare( @@ -242,6 +243,7 @@ lexicographical_compare( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline int lexicographical_compare( @@ -252,7 +254,8 @@ lexicographical_compare( CharT, Traits>(s1.data(), s1.size(), s2, n2); } -template +template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline int lexicographical_compare( @@ -264,6 +267,7 @@ lexicographical_compare( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline int lexicographical_compare( @@ -275,6 +279,7 @@ lexicographical_compare( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline int lexicographical_compare( @@ -289,8 +294,9 @@ lexicographical_compare( // representation of a binary number. This includes // the potential minus sign. // +BOOST_STATIC_STRING_CPP11_CONSTEXPR inline -std::size_t constexpr +std::size_t max_digits(std::size_t bytes) { return static_cast( diff --git a/include/boost/static_string/static_string.hpp b/include/boost/static_string/static_string.hpp index 2d95470..0232a04 100644 --- a/include/boost/static_string/static_string.hpp +++ b/include/boost/static_string/static_string.hpp @@ -2424,52 +2424,6 @@ private: assign_char(CharT ch, std::false_type); }; -//------------------------------------------------------------------------------ -// -// Disallowed operations -// -//------------------------------------------------------------------------------ - -// These operations are explicitly deleted since -// there is no reasonable implementation possible. - -template< - std::size_t N, std::size_t M, - typename CharT, typename Traits> -inline -void -operator+( - basic_static_stringconst& lhs, - basic_static_stringconst& rhs) = delete; - -template -inline -void -operator+( - CharT const* lhs, - basic_static_stringconst& rhs) = delete; - -template -inline -void -operator+( - CharT lhs, - basic_static_string const& rhs) = delete; - -template -inline -void -operator+( - basic_static_string const& lhs, - CharT const* rhs) = delete; - -template -inline -void -operator+( - basic_static_string const& lhs, - CharT rhs) = delete; - //------------------------------------------------------------------------------ // // Non-member functions @@ -2479,6 +2433,7 @@ operator+( template< std::size_t N, std::size_t M, typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator==( @@ -2491,6 +2446,7 @@ operator==( template< std::size_t N, std::size_t M, typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator!=( @@ -2503,6 +2459,7 @@ operator!=( template< std::size_t N, std::size_t M, typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator<( @@ -2515,6 +2472,7 @@ operator<( template< std::size_t N, std::size_t M, typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator<=( @@ -2527,6 +2485,7 @@ operator<=( template< std::size_t N, std::size_t M, typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator>( @@ -2539,6 +2498,7 @@ operator>( template< std::size_t N, std::size_t M, typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator>=( @@ -2549,6 +2509,7 @@ operator>=( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator==( @@ -2561,6 +2522,7 @@ operator==( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator==( @@ -2573,6 +2535,7 @@ operator==( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator!=( @@ -2585,6 +2548,7 @@ operator!=( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator!=( @@ -2597,6 +2561,7 @@ operator!=( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator<( @@ -2609,6 +2574,7 @@ operator<( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator<( @@ -2621,6 +2587,7 @@ operator<( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator<=( @@ -2633,6 +2600,7 @@ operator<=( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator<=( @@ -2645,6 +2613,7 @@ operator<=( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator>( @@ -2657,6 +2626,7 @@ operator>( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator>( @@ -2669,6 +2639,7 @@ operator>( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator>=( @@ -2681,6 +2652,7 @@ operator>=( } template +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline bool operator>=( @@ -2692,6 +2664,67 @@ operator>=( rhs, Traits::length(rhs)) >= 0; } +template< + std::size_t N, std::size_t M, + typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR +inline +basic_static_string +operator+( + basic_static_stringconst& lhs, + basic_static_stringconst& rhs) +{ + return basic_static_string(lhs) += rhs; +} + +template +BOOST_STATIC_STRING_CPP14_CONSTEXPR +inline +basic_static_string +operator+( + basic_static_string const& lhs, + CharT rhs) +{ + return basic_static_string(lhs) += rhs; +} + +template +BOOST_STATIC_STRING_CPP14_CONSTEXPR +inline +basic_static_string +operator+( + CharT lhs, + basic_static_string const& rhs) +{ + return basic_static_string(rhs).insert(0, lhs); +} + +template< + std::size_t N, std::size_t M, + typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR +inline +basic_static_string +operator+( + basic_static_stringconst& lhs, + const CharT(&rhs)[M]) +{ + return basic_static_string(lhs).append(+rhs, M); +} + +template< + std::size_t N, std::size_t M, + typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR +inline +basic_static_string +operator+( + const CharT(&lhs)[N], + basic_static_stringconst& rhs) +{ + return basic_static_string(rhs).insert(0, +rhs, N); +} + //------------------------------------------------------------------------------ // // swap @@ -2702,6 +2735,7 @@ template< std::size_t N, typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline void swap( @@ -2714,6 +2748,7 @@ swap( template< std::size_t N, std::size_t M, typename CharT, typename Traits> +BOOST_STATIC_STRING_CPP14_CONSTEXPR inline void swap(