24 #pragma GCC diagnostic ignored "-Wvarargs"
30 size_t _the_printer_1(
void*,
DD4hep::PrintLevel lvl,
const char* src,
const char* text);
31 size_t _the_printer_2(
void* par,
DD4hep::PrintLevel lvl,
const char* src,
const char* fmt, va_list& args);
33 std::string print_fmt =
"%-16s %5s %s";
56 size_t _the_printer_1(
void*,
DD4hep::PrintLevel lvl,
const char* src,
const char* text) {
61 size_t len = ::fprintf(stdout, print_fmt.c_str(), src, print_level(lvl), text);
66 size_t _the_printer_2(
void* par,
DD4hep::PrintLevel lvl,
const char* src,
const char* fmt, va_list& args) {
67 if ( !print_func_1 ) {
73 ::snprintf(text,
sizeof(text),print_fmt.c_str(),src,print_level(lvl),fmt);
74 size_t len = ::vfprintf(stdout, text, args);
79 ::vsnprintf(str,
sizeof(str), fmt, args);
80 return print_func_1(par, lvl, src, str);
83 string __format(
const char* fmt, va_list& args) {
85 ::vsnprintf(str,
sizeof(str), fmt, args);
98 for(
int i=0; i<argc;) {
100 if ( ++i < argc ) str <<
" ";
112 if (severity >= print_lvl) {
128 if (severity >= print_lvl) {
131 printout(severity, src.c_str(), fmt, args);
144 if (severity >= print_lvl) {
146 va_start(args, &fmt);
147 printout(severity, src, fmt.c_str(), args);
160 if (severity >= print_lvl) {
162 va_start(args, &fmt);
163 printout(severity, src.c_str(), fmt.c_str(), args);
176 if (severity >= print_lvl) {
177 print_func_2(print_arg, severity,src,fmt,args);
189 return printout(severity, src.c_str(), fmt, args);
199 return printout(severity, src, fmt.c_str(), args);
209 return printout(severity, src.c_str(), fmt.c_str(), args);
219 va_start(args, &fmt);
220 return except(src.c_str(),fmt.c_str(), args);
231 return except(src, fmt, args);
241 string msg = __format(fmt.c_str(), args);
245 throw runtime_error((src+
": "+msg).c_str());
255 string msg = __format(fmt, args);
259 throw runtime_error((
string(src)+
": "+msg).c_str());
269 va_start(args, &fmt);
270 string str =
format(src, fmt, args);
283 string str =
format(src, fmt, args);
295 return format(src.c_str(), fmt.c_str(), args);
306 size_t len1 = ::snprintf(str,
sizeof(str),
"%s: ", src);
307 size_t len2 = ::vsnprintf(str + len1,
sizeof(str) - len1, fmt, args);
308 if ( len2 >
sizeof(str) - len1 ) {
309 len2 =
sizeof(str) - len1 - 1;
310 str[
sizeof(str)-1] = 0;
318 print_lvl = new_level;
329 if ( !value )
except(
"Printout",
"Invalid printlevel requested");
348 except(
"Printout",
"Unknown printlevel requested:%s",value);
359 string old = print_fmt;
360 print_fmt = new_format;
367 print_func_1 = fcn ? fcn : _the_printer_1;
373 print_func_2 = fcn ? fcn : _the_printer_2;
void setPrinter2(void *print_arg, output_function2_t fcn)
Customize printer function.
PrintLevel printLevel()
Access the current printer level.
int except(const std::string &src, const std::string &fmt,...)
Calls the display action with ERROR and throws an std::runtime_error exception.
std::string format(const std::string &src, const std::string &fmt,...)
Build formatted string.
size_t(* output_function1_t)(void *, PrintLevel severity, const char *, const char *)
void setPrinter(void *print_arg, output_function1_t fcn)
Customize printer function.
size_t(* output_function2_t)(void *, PrintLevel severity, const char *, const char *, va_list &args)
std::string setPrintFormat(const std::string &new_format)
Set new printout format for the 3 fields: source-level-message. All 3 are strings.
int printout(PrintLevel severity, const char *src, const char *fmt,...)
Calls the display action with a given severity level.
PrintLevel setPrintLevel(PrintLevel new_level)
Set new print level. Returns the old print level.
std::string arguments(int argc, char **argv)
Helper function to serialize argument list to a single string.