#include #include #include #include "vtr_util.h" #include "vtr_log.h" #include "log.h" namespace vtr { PrintHandlerInfo printf = log_print_info; PrintHandlerInfo printf_info = log_print_info; PrintHandlerWarning printf_warning = log_print_warning; PrintHandlerError printf_error = log_print_error; PrintHandlerDirect printf_direct = log_print_direct; void set_log_file(const char* filename) { log_set_output_file(filename); } } // namespace vtr void add_warnings_to_suppress(std::string function_name) { warnings_to_suppress.insert(function_name); } void set_noisy_warn_log_file(std::string log_file_name) { std::ofstream log; log.open(log_file_name, std::ifstream::out | std::ifstream::trunc); log.close(); noisy_warn_log_file = log_file_name; } void print_or_suppress_warning(const char* pszFileName, unsigned int lineNum, const char* pszFuncName, const char* pszMessage, ...) { std::string function_name(pszFuncName); va_list va_args; va_start(va_args, pszMessage); std::string msg = vtr::vstring_fmt(pszMessage, va_args); va_end(va_args); auto result = warnings_to_suppress.find(function_name); if (result == warnings_to_suppress.end()) { vtr::printf_warning(pszFileName, lineNum, msg.data()); } else if (!noisy_warn_log_file.empty()) { std::ofstream log; log.open(noisy_warn_log_file.data(), std::ios_base::app); log << "Warning:\n\tfile: " << pszFileName << "\n\tline: " << lineNum << "\n\tmessage: " << msg << std::endl; log.close(); } }