From 0a64c2b8a42d766e5a893fcab2d4573b33cca74f Mon Sep 17 00:00:00 2001 From: Luca Fedeli Date: Tue, 8 Mar 2022 18:38:25 +0100 Subject: Make error and info messages visually uniform (#2939) * initial work to add msg formatter * wip * replace AMREX_ALWAYS_ASSERT_WITH_MESSAGE with WarpX equivalent --- Source/Utils/TextMsg.cpp | 73 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Source/Utils/TextMsg.cpp (limited to 'Source/Utils/TextMsg.cpp') diff --git a/Source/Utils/TextMsg.cpp b/Source/Utils/TextMsg.cpp new file mode 100644 index 000000000..5b945f122 --- /dev/null +++ b/Source/Utils/TextMsg.cpp @@ -0,0 +1,73 @@ +/* Copyright 2022 Luca Fedeli + * + * This file is part of WarpX. + * + * License: BSD-3-Clause-LBNL + */ + +#include "TextMsg.H" + +#include "WarpXUtil.H" + +#include + +#include + +namespace +{ + constexpr auto err_prefix = "### ERROR : "; + constexpr auto warn_prefix = "!!! WARNING : "; + constexpr auto info_prefix = "--- INFO : "; + constexpr auto err_line_prefix = "# "; + constexpr auto line_prefix = " "; + constexpr auto line_length = 66; + + std::string Msg( + const std::string& msg, + const std::string& msg_prefix, + const std::string& msg_line_prefix, + const int msg_line_length, + const bool do_text_wrapping) + { + if(!do_text_wrapping){ + return msg_prefix + msg + "\n"; + } + + const auto wrapped_text = WarpXUtilStr::automatic_text_wrap( + msg, msg_line_length); + + std::stringstream ss_out; + + std::for_each(std::begin(wrapped_text), std::end(wrapped_text), + [&,ln=0](const auto& line) mutable { + ss_out << ((ln++ == 0) ? msg_prefix : msg_line_prefix); + ss_out << line << "\n"; + }); + + return ss_out.str(); + } +} + +std::string Utils::TextMsg::Err(const std::string& msg, const bool do_text_wrapping) +{ + return ::Msg( + msg, ::err_prefix, ::err_line_prefix, ::line_length, do_text_wrapping); +} + +std::string Utils::TextMsg::Info(const std::string& msg, const bool do_text_wrapping) +{ + return ::Msg( + msg, ::info_prefix, ::line_prefix, ::line_length, do_text_wrapping); +} + +std::string Utils::TextMsg::Warn(const std::string& msg, const bool do_text_wrapping) +{ + return ::Msg( + msg, ::warn_prefix, ::line_prefix, ::line_length, do_text_wrapping); +} + +void Utils::TextMsg::Assert(const char* ex, const char* file, const int line, const std::string& msg) +{ + const auto n_msg = "\n" + Err(msg); + amrex::Assert(ex , file, line , n_msg.c_str()); +} -- cgit v1.2.3