#include "eax_exception.h" #include #include EaxException::EaxException( const char* context, const char* message) : std::runtime_error{make_message(context, message)} { } std::string EaxException::make_message( const char* context, const char* message) { const auto context_size = (context ? std::string::traits_type::length(context) : 0); const auto has_contex = (context_size > 0); const auto message_size = (message ? std::string::traits_type::length(message) : 0); const auto has_message = (message_size > 0); if (!has_contex && !has_message) { return std::string{}; } constexpr auto left_prefix = "["; const auto left_prefix_size = std::string::traits_type::length(left_prefix); constexpr auto right_prefix = "] "; const auto right_prefix_size = std::string::traits_type::length(right_prefix); const auto what_size = ( has_contex ? left_prefix_size + context_size + right_prefix_size : 0) + message_size + 1; auto what = std::string{}; what.reserve(what_size); if (has_contex) { what.append(left_prefix, left_prefix_size); what.append(context, context_size); what.append(right_prefix, right_prefix_size); } if (has_message) { what.append(message, message_size); } return what; }