diff options
Diffstat (limited to 'src/crepe/util')
| -rw-r--r-- | src/crepe/util/CMakeLists.txt | 2 | ||||
| -rw-r--r-- | src/crepe/util/fmt.cpp | 34 | ||||
| -rw-r--r-- | src/crepe/util/fmt.h | 10 | ||||
| -rw-r--r-- | src/crepe/util/log.cpp | 27 | ||||
| -rw-r--r-- | src/crepe/util/log.h | 2 | 
5 files changed, 56 insertions, 19 deletions
| diff --git a/src/crepe/util/CMakeLists.txt b/src/crepe/util/CMakeLists.txt index 100f028..e2cffaf 100644 --- a/src/crepe/util/CMakeLists.txt +++ b/src/crepe/util/CMakeLists.txt @@ -1,9 +1,11 @@  target_sources(crepe PUBLIC  	log.cpp +	fmt.cpp  )  target_sources(crepe PUBLIC FILE_SET HEADERS FILES  	color.h  	log.h +	fmt.h  ) diff --git a/src/crepe/util/fmt.cpp b/src/crepe/util/fmt.cpp new file mode 100644 index 0000000..3a43a6f --- /dev/null +++ b/src/crepe/util/fmt.cpp @@ -0,0 +1,34 @@ +#include <string> +#include <cstdio> +#include <cstdarg> + +#include "fmt.h" + +using namespace std; + +string crepe::util::va_stringf(va_list args, const char * fmt) { +	va_list args_copy; +	va_copy(args_copy, args); + +	size_t sz = vsnprintf(NULL, 0, fmt, args_copy) + 1; +	char * msg = (char *) malloc(sz); +	va_end(args_copy); + +	vsnprintf(msg, sz, fmt, args); + +	string out = msg; +	free(msg); + +	va_end(args); + +	return out; +} + +string crepe::util::stringf(const char * fmt, ...) { +	va_list args; +	va_start(args, fmt); +	string out = va_stringf(args, fmt); +	va_end(args); +	return out; +} + diff --git a/src/crepe/util/fmt.h b/src/crepe/util/fmt.h new file mode 100644 index 0000000..5c45703 --- /dev/null +++ b/src/crepe/util/fmt.h @@ -0,0 +1,10 @@ +#pragma once + +#include <string> + +namespace crepe::util { + +std::string va_stringf(va_list args, const char * fmt); +std::string stringf(const char * fmt, ...); + +} diff --git a/src/crepe/util/log.cpp b/src/crepe/util/log.cpp index f91d52c..b46620d 100644 --- a/src/crepe/util/log.cpp +++ b/src/crepe/util/log.cpp @@ -4,6 +4,7 @@  #include <string>  #include "log.h" +#include "fmt.h"  using namespace crepe::util; @@ -14,37 +15,27 @@ static const char * const LOG_PREFIX[] = {  	[log_level::ERROR] = "[ERR] ",  }; -static void va_logf(enum log_level level, va_list args, const std::string fmt) { -	va_list args_copy; -	va_copy(args_copy, args); - -	// prepend log level and ensure newline -	std::string format_fixed = LOG_PREFIX[level] + fmt; -	if (!format_fixed.ends_with("\n")) format_fixed += "\n"; - -	size_t sz = vsnprintf(NULL, 0, format_fixed.c_str(), args_copy) + 1; -	char * msg = (char *) malloc(sz); -	va_end(args_copy); - -	vsnprintf(msg, sz, format_fixed.c_str(), args); +static void log(enum log_level level, const std::string msg) { +	using namespace std; +	string final = string(LOG_PREFIX[level]) + msg; +	if (!final.ends_with("\n")) final += "\n";  	// TODO: also log to file or smth -	printf("%s", msg); +	printf("%s", final.c_str());  	fflush(stdout); - -	free(msg);  }  void crepe::util::logf(const char * fmt, ...) {  	va_list args;  	va_start(args, fmt); -	va_logf(crepe::util::log_level::DEBUG, args, fmt); +	log(log_level::DEBUG, va_stringf(args, fmt));  	va_end(args);  }  void crepe::util::logf(log_level level, const char * fmt, ...) {  	va_list args;  	va_start(args, fmt); -	va_logf(level, args, fmt); +	log(level, va_stringf(args, fmt));  	va_end(args);  } + diff --git a/src/crepe/util/log.h b/src/crepe/util/log.h index fa5f633..3e36f0a 100644 --- a/src/crepe/util/log.h +++ b/src/crepe/util/log.h @@ -7,7 +7,7 @@  // utility macros  #define _crepe_logf_here(fmt, ...) \ -	crepe::util::logf(util::log_level::DEBUG, "%s%s (%s:%d)" fmt "\n", \ +	crepe::util::logf(util::log_level::DEBUG, "%s%s (%s:%d)%s" fmt "\n", \  					  crepe::util::color::FG_WHITE, __PRETTY_FUNCTION__, \  					  __FILE_NAME__, __LINE__, crepe::util::color::RESET, \  					  __VA_ARGS__) |