From b636924958794af6763c7098ea7d36f73c8b7f44 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Fri, 4 May 2018 16:14:03 +0200 Subject: Improve libhello with better error handling --- libformat/libformat/format.cxx | 11 ++++++++--- libformat/libformat/format.hxx | 4 +++- 2 files changed, 11 insertions(+), 4 deletions(-) (limited to 'libformat/libformat') diff --git a/libformat/libformat/format.cxx b/libformat/libformat/format.cxx index de8a782..6450093 100644 --- a/libformat/libformat/format.cxx +++ b/libformat/libformat/format.cxx @@ -2,6 +2,7 @@ #include // to{upper,lower}() #include // transform() +#include using namespace std; @@ -10,9 +11,13 @@ namespace format string format_hello (const string& g, const string& n, volume v) { - string r (g); + if (const char* w = (g.empty () ? "empty greeting" : + n.empty () ? "empty name" : nullptr)) + throw invalid_argument (w); - transform (r.begin (), r.end (), r.begin (), + string h (g); + + transform (h.begin (), h.end (), h.begin (), [v] (char c) -> char { switch (v) @@ -24,6 +29,6 @@ namespace format return c; }); - return r += ", " + n + '!'; + return h += ", " + n + '!'; } } diff --git a/libformat/libformat/format.hxx b/libformat/libformat/format.hxx index 3641b67..489f63c 100644 --- a/libformat/libformat/format.hxx +++ b/libformat/libformat/format.hxx @@ -9,5 +9,7 @@ namespace format enum class volume {quiet, normal, loud}; LIBFORMAT_SYMEXPORT std::string - format_hello (const std::string& greeting, const std::string& name, volume); + format_hello (const std::string& greeting, + const std::string& name, + volume = volume::normal); } -- cgit v1.1