Skip to content

Commit

Permalink
move format_string to the separame trait
Browse files Browse the repository at this point in the history
  • Loading branch information
n0lavar committed Oct 27, 2023
1 parent 9d80377 commit 0e438a6
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 25 deletions.
16 changes: 9 additions & 7 deletions include/qx/containers/string/format_string.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,13 +17,15 @@ namespace qx
{

/**
@struct basic_format_string
@brief std::basic_format_string wrapper that performs additional compile time checks
@tparam char_t - char type
@tparam args_t - template parameter pack type
@struct basic_format_string_strong_checks
@brief std::basic_format_string wrapper that performs additional compile time checks
@details Checks braces balance and matching pairs of braces to the number of arguments
in exchange for some format features, such as nested replacement fields
@tparam char_t - char type
@tparam args_t - template parameter pack type
**/
template<class char_t, class... args_t>
struct basic_format_string : public std::basic_format_string<char_t, args_t...>
struct basic_format_string_strong_checks : public std::basic_format_string<char_t, args_t...>
{
/**
@brief basic_format_string object constructor
Expand All @@ -32,7 +34,7 @@ struct basic_format_string : public std::basic_format_string<char_t, args_t...>
**/
template<class T>
requires std::convertible_to<const T&, qx::basic_string_view<char_t>>
consteval basic_format_string(const T& value);
consteval basic_format_string_strong_checks(const T& value);

/**
@brief Check braces balance and args num
Expand All @@ -45,7 +47,7 @@ struct basic_format_string : public std::basic_format_string<char_t, args_t...>
};

template<class... args_t>
using format_string = basic_format_string<char_type, std::type_identity_t<args_t>...>;
using format_string_strong_checks = basic_format_string_strong_checks<char_type, std::type_identity_t<args_t>...>;

template<class char_t, class... args_t>
concept format_acceptable_args =
Expand Down
4 changes: 2 additions & 2 deletions include/qx/containers/string/format_string.inl
Original file line number Diff line number Diff line change
Expand Up @@ -13,14 +13,14 @@ namespace qx
template<class char_t, class... args_t>
template<class T>
requires std::convertible_to<const T&, qx::basic_string_view<char_t>>
consteval basic_format_string<char_t, args_t...>::basic_format_string(const T& value)
consteval basic_format_string_strong_checks<char_t, args_t...>::basic_format_string_strong_checks(const T& value)
: std::basic_format_string<char_t, args_t...>(parse_format_string(value))
{
}

template<class char_t, class... args_t>
template<class T>
consteval const T& basic_format_string<char_t, args_t...>::parse_format_string(const T& value)
consteval const T& basic_format_string_strong_checks<char_t, args_t...>::parse_format_string(const T& value)
{
int nBracesBalance = 0;
size_t nNumBracesPairs = 0;
Expand Down
3 changes: 1 addition & 2 deletions include/qx/containers/string/string.h
Original file line number Diff line number Diff line change
Expand Up @@ -79,9 +79,8 @@ class basic_string
using string_view = std::basic_string_view<value_type>;
using sstream_type = std::basic_stringstream<value_type>;
using views = std::vector<string_view>;

template<class... args_t>
using format_string_type = basic_format_string<value_type, std::type_identity_t<args_t>...>;
using format_string_type = typename traits_type::template format_string<std::type_identity_t<args_t>...>;

static constexpr size_type npos = std::numeric_limits<size_type>::max();

Expand Down
12 changes: 12 additions & 0 deletions include/qx/containers/string/string_traits.h
Original file line number Diff line number Diff line change
Expand Up @@ -326,6 +326,17 @@ struct compare_traits<wchar_t, usings_char_traits_t>



// ------------------------------------------------ format_string_traits -----------------------------------------------

template<class value_t, class usings_char_traits_t>
struct format_string_traits
{
template<class... args_t>
using format_string = std::basic_format_string<value_t, args_t...>;
};



// --------------------------------------------------- format_traits ---------------------------------------------------

template<class value_t, class usings_char_traits_t>
Expand Down Expand Up @@ -397,6 +408,7 @@ using traits = constructor<
transform_char_traits<value_t, usings_traits<value_t>>,
length_traits<value_t, usings_traits<value_t>>,
compare_traits<value_t, usings_traits<value_t>>,
format_string_traits<value_t, usings_traits<value_t>>,
format_traits<value_t, usings_traits<value_t>>>;

} // namespace qx::string_traits
1 change: 1 addition & 0 deletions include/qx/containers/string/string_view_iterator.inl
Original file line number Diff line number Diff line change
Expand Up @@ -104,4 +104,5 @@ constexpr void string_view_iterator<char_t>::next() noexcept

*this = end();
}

} // namespace qx
12 changes: 6 additions & 6 deletions include/qx/logger/logger.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,12 +86,12 @@ class logger
template<class... args_t>
requires(log_acceptable_args<args_t...>)
void log(
verbosity eVerbosity,
format_string<args_t...> sFormat,
const category& category,
string_view svFile,
string_view svFunction,
int nLine,
verbosity eVerbosity,
format_string_strong_checks<args_t...> sFormat,
const category& category,
string_view svFile,
string_view svFunction,
int nLine,
const args_t&... args);

/**
Expand Down
12 changes: 6 additions & 6 deletions include/qx/logger/logger.inl
Original file line number Diff line number Diff line change
Expand Up @@ -25,12 +25,12 @@ inline void logger::log(
template<class... args_t>
requires(log_acceptable_args<args_t...>)
inline void logger::log(
verbosity eVerbosity,
format_string<args_t...> sFormat,
const category& category,
string_view svFile,
string_view svFunction,
int nLine,
verbosity eVerbosity,
format_string_strong_checks<args_t...> sFormat,
const category& category,
string_view svFile,
string_view svFunction,
int nLine,
const args_t&... args)
{
const auto sLogMessage = qx::string::static_format(sFormat, args...);
Expand Down
4 changes: 2 additions & 2 deletions include/qx/macros/assert.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ void resolve_assert_proceeding(
int nLine,
string_view svCondition,
// ... args
format_string<args_t...> sFormat,
format_string_strong_checks<args_t...> sFormat,
const args_t&... args)
{
string sMessage;
Expand Down Expand Up @@ -105,7 +105,7 @@ void resolve_assert_proceeding(
string_view svCondition,
// ... args
const category& category,
format_string<args_t...> sFormat,
format_string_strong_checks<args_t...> sFormat,
const args_t&... args)
{
string sMessage;
Expand Down
6 changes: 6 additions & 0 deletions tests/test_string.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ using Implementations = ::testing::Types<
qx::string_traits::transform_char_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::length_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::compare_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::format_string_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::format_traits<char, qx::string_traits::usings_traits<char>>>,
qx::string_traits::constructor<
qx::string_traits::usings_traits<char>,
Expand All @@ -44,6 +45,7 @@ using Implementations = ::testing::Types<
qx::string_traits::transform_char_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::length_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::compare_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::format_string_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::format_traits<char, qx::string_traits::usings_traits<char>>>,
qx::string_traits::constructor<
qx::string_traits::usings_traits<char>,
Expand All @@ -53,6 +55,7 @@ using Implementations = ::testing::Types<
qx::string_traits::transform_char_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::length_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::compare_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::format_string_traits<char, qx::string_traits::usings_traits<char>>,
qx::string_traits::format_traits<char, qx::string_traits::usings_traits<char>>>,
qx::string_traits::constructor<
qx::string_traits::usings_traits<wchar_t>,
Expand All @@ -62,6 +65,7 @@ using Implementations = ::testing::Types<
qx::string_traits::transform_char_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::length_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::compare_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::format_string_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::format_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>>,
qx::string_traits::constructor<
qx::string_traits::usings_traits<wchar_t>,
Expand All @@ -71,6 +75,7 @@ using Implementations = ::testing::Types<
qx::string_traits::transform_char_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::length_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::compare_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::format_string_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::format_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>>,
qx::string_traits::constructor<
qx::string_traits::usings_traits<wchar_t>,
Expand All @@ -80,6 +85,7 @@ using Implementations = ::testing::Types<
qx::string_traits::transform_char_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::length_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::compare_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::format_string_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>,
qx::string_traits::format_traits<wchar_t, qx::string_traits::usings_traits<wchar_t>>>>;

template<class TraitsType>
Expand Down

0 comments on commit 0e438a6

Please sign in to comment.