From: Arnaud Giersch Date: Tue, 21 Dec 2010 21:21:14 +0000 (+0100) Subject: Make opt::print() more friendly to update. X-Git-Tag: v0.1~206 X-Git-Url: https://bilbo.iut-bm.univ-fcomte.fr/and/gitweb/loba.git/commitdiff_plain/cd488767770ec6e9fb9437dcdd589af3fb02fbb7?ds=sidebyside;hp=e41f399c89624041ca0cfc03c592c4f9e6902a45 Make opt::print() more friendly to update. --- diff --git a/options.cpp b/options.cpp index 76bc997..86cec69 100644 --- a/options.cpp +++ b/options.cpp @@ -80,6 +80,30 @@ namespace { // some helper functions for opt::print() + std::string* descr_str; + std::string* val_or_string_str; + + void print_helper_init() + { + descr_str = new std::string; + val_or_string_str = new std::string; + } + + void print_helper_destroy() + { + delete val_or_string_str; + delete descr_str; + } + + const char* descr(const char* str) + { + const int descr_width = 35; + std::string* res = descr_str; + *res = str; + res->resize(descr_width, '.'); + return res->c_str(); + } + const char* on_off(bool b) { return b ? "on" : "off"; @@ -88,15 +112,15 @@ namespace { template const char* val_or_string(const T& val, const char* str, const T& deflt = 0) { - static std::string res; + std::string* res = val_or_string_str; if (val != deflt) { std::ostringstream oss; oss << val; - res = oss.str(); + *res = oss.str(); } else { - res = str; + *res = str; } - return res.c_str(); + return res->c_str(); } // helper function for opt::parse_args() @@ -223,28 +247,32 @@ bool opt::parse_args(int* argc, char* argv[]) void opt::print() { + print_helper_init(); +#define DESCR(description, format, value) \ + INFO2("| %s: " format, descr(description), value) INFO0(",----[ Simulation parameters ]"); - INFO1("| log rate.....................: %s", - val_or_string(opt::log_rate, "disabled")); - INFO1("| platform file................: \"%s\"", opt::platform_file.c_str()); - if (opt::auto_depl::enabled) { + DESCR("log rate", "%s", val_or_string(log_rate, "disabled")); + DESCR("platform file", "\"%s\"", platform_file.c_str()); + if (auto_depl::enabled) { INFO0("| automatic deployment enabled"); - INFO1("| - topology...................: %s", opt::auto_depl::topology.c_str()); - INFO1("| - number of hosts............: %s", - val_or_string(opt::auto_depl::nhosts, "auto")); - INFO1("| - initial load...............: %s", - val_or_string(opt::auto_depl::load, "auto")); + DESCR("- topology", "%s", auto_depl::topology.c_str()); + DESCR("- number of hosts", "%s", val_or_string(auto_depl::nhosts, + "auto")); + DESCR("- initial load", "%s", val_or_string(auto_depl::load, + "auto")); } else { - INFO1("| deployment file..............: \"%s\"", opt::deployment_file.c_str()); + DESCR("deployment file", "\"%s\"", deployment_file.c_str()); } - INFO1("| load balancing algorithm.....: %s", opt::loba_algo.c_str()); - INFO1("| bookkeeping..................: %s", on_off(opt::bookkeeping)); - INFO1("| computation cost factors.....: [%s]", opt::comp_cost.to_string().c_str()); - INFO1("| communication cost factors...: [%s]", opt::comm_cost.to_string().c_str()); - INFO1("| maximum number of iterations.: %s", - val_or_string(opt::maxiter, "infinity")); - INFO1("| exit on close................: %s", on_off(opt::exit_on_close)); + DESCR("load balancing algorithm", "%s", loba_algo.c_str()); + DESCR("bookkeeping", "%s", on_off(bookkeeping)); + DESCR("computation cost factors", "[%s]", comp_cost.to_string().c_str()); + DESCR("communication cost factors", "[%s]", comm_cost.to_string().c_str()); + DESCR("maximum number of iterations", "%s", + val_or_string(maxiter, "infinity")); + DESCR("exit on close", "%s", on_off(exit_on_close)); INFO0("`----"); +#undef DESCR + print_helper_destroy(); } void opt::usage()