Added operator+ for operands of known size, more constexpr

This commit is contained in:
Krystian Stasiowski
2019-12-16 16:42:53 -05:00
parent 8e903c4f1b
commit 937542fcad
2 changed files with 89 additions and 48 deletions

View File

@ -226,6 +226,7 @@ using optimization_base =
#endif #endif
template<typename CharT, typename Traits> template<typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
int int
lexicographical_compare( lexicographical_compare(
@ -242,6 +243,7 @@ lexicographical_compare(
} }
template<typename CharT, typename Traits> template<typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
int int
lexicographical_compare( lexicographical_compare(
@ -252,7 +254,8 @@ lexicographical_compare(
CharT, Traits>(s1.data(), s1.size(), s2, n2); CharT, Traits>(s1.data(), s1.size(), s2, n2);
} }
template<std::size_t N, typename CharT, typename Traits > template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
int int
lexicographical_compare( lexicographical_compare(
@ -264,6 +267,7 @@ lexicographical_compare(
} }
template<typename CharT, typename Traits> template<typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
int int
lexicographical_compare( lexicographical_compare(
@ -275,6 +279,7 @@ lexicographical_compare(
} }
template<std::size_t N, std::size_t M, typename CharT, typename Traits> template<std::size_t N, std::size_t M, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
int int
lexicographical_compare( lexicographical_compare(
@ -289,8 +294,9 @@ lexicographical_compare(
// representation of a binary number. This includes // representation of a binary number. This includes
// the potential minus sign. // the potential minus sign.
// //
BOOST_STATIC_STRING_CPP11_CONSTEXPR
inline inline
std::size_t constexpr std::size_t
max_digits(std::size_t bytes) max_digits(std::size_t bytes)
{ {
return static_cast<std::size_t>( return static_cast<std::size_t>(

View File

@ -2424,52 +2424,6 @@ private:
assign_char(CharT ch, std::false_type); 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_string<N, CharT, Traits>const& lhs,
basic_static_string<M, CharT, Traits>const& rhs) = delete;
template<std::size_t N, typename CharT, typename Traits>
inline
void
operator+(
CharT const* lhs,
basic_static_string<N, CharT, Traits>const& rhs) = delete;
template<std::size_t N, typename CharT, typename Traits>
inline
void
operator+(
CharT lhs,
basic_static_string<N, CharT, Traits> const& rhs) = delete;
template<std::size_t N, typename CharT, typename Traits>
inline
void
operator+(
basic_static_string<N, CharT, Traits> const& lhs,
CharT const* rhs) = delete;
template<std::size_t N, typename CharT, typename Traits>
inline
void
operator+(
basic_static_string<N, CharT, Traits> const& lhs,
CharT rhs) = delete;
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// //
// Non-member functions // Non-member functions
@ -2479,6 +2433,7 @@ operator+(
template< template<
std::size_t N, std::size_t M, std::size_t N, std::size_t M,
typename CharT, typename Traits> typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator==( operator==(
@ -2491,6 +2446,7 @@ operator==(
template< template<
std::size_t N, std::size_t M, std::size_t N, std::size_t M,
typename CharT, typename Traits> typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator!=( operator!=(
@ -2503,6 +2459,7 @@ operator!=(
template< template<
std::size_t N, std::size_t M, std::size_t N, std::size_t M,
typename CharT, typename Traits> typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator<( operator<(
@ -2515,6 +2472,7 @@ operator<(
template< template<
std::size_t N, std::size_t M, std::size_t N, std::size_t M,
typename CharT, typename Traits> typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator<=( operator<=(
@ -2527,6 +2485,7 @@ operator<=(
template< template<
std::size_t N, std::size_t M, std::size_t N, std::size_t M,
typename CharT, typename Traits> typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator>( operator>(
@ -2539,6 +2498,7 @@ operator>(
template< template<
std::size_t N, std::size_t M, std::size_t N, std::size_t M,
typename CharT, typename Traits> typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator>=( operator>=(
@ -2549,6 +2509,7 @@ operator>=(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator==( operator==(
@ -2561,6 +2522,7 @@ operator==(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator==( operator==(
@ -2573,6 +2535,7 @@ operator==(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator!=( operator!=(
@ -2585,6 +2548,7 @@ operator!=(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator!=( operator!=(
@ -2597,6 +2561,7 @@ operator!=(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator<( operator<(
@ -2609,6 +2574,7 @@ operator<(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator<( operator<(
@ -2621,6 +2587,7 @@ operator<(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator<=( operator<=(
@ -2633,6 +2600,7 @@ operator<=(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator<=( operator<=(
@ -2645,6 +2613,7 @@ operator<=(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator>( operator>(
@ -2657,6 +2626,7 @@ operator>(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator>( operator>(
@ -2669,6 +2639,7 @@ operator>(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator>=( operator>=(
@ -2681,6 +2652,7 @@ operator>=(
} }
template<std::size_t N, typename CharT, typename Traits> template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
bool bool
operator>=( operator>=(
@ -2692,6 +2664,67 @@ operator>=(
rhs, Traits::length(rhs)) >= 0; 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<N + M, CharT, Traits>
operator+(
basic_static_string<N, CharT, Traits>const& lhs,
basic_static_string<M, CharT, Traits>const& rhs)
{
return basic_static_string<N + M, CharT, Traits>(lhs) += rhs;
}
template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline
basic_static_string<N + 1, CharT, Traits>
operator+(
basic_static_string<N, CharT, Traits> const& lhs,
CharT rhs)
{
return basic_static_string<N + 1, CharT, Traits>(lhs) += rhs;
}
template<std::size_t N, typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline
basic_static_string<N + 1, CharT, Traits>
operator+(
CharT lhs,
basic_static_string<N, CharT, Traits> const& rhs)
{
return basic_static_string<N + 1, CharT, Traits>(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<N + M, CharT, Traits>
operator+(
basic_static_string<N, CharT, Traits>const& lhs,
const CharT(&rhs)[M])
{
return basic_static_string<N + M, CharT, Traits>(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<N + M, CharT, Traits>
operator+(
const CharT(&lhs)[N],
basic_static_string<M, CharT, Traits>const& rhs)
{
return basic_static_string<N + M, CharT, Traits>(rhs).insert(0, +rhs, N);
}
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
// //
// swap // swap
@ -2702,6 +2735,7 @@ template<
std::size_t N, std::size_t N,
typename CharT, typename CharT,
typename Traits> typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
void void
swap( swap(
@ -2714,6 +2748,7 @@ swap(
template< template<
std::size_t N, std::size_t M, std::size_t N, std::size_t M,
typename CharT, typename Traits> typename CharT, typename Traits>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
inline inline
void void
swap( swap(