Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/gabime/spdlog.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJean-Michaël Celerier <jeanmichael.celerier@gmail.com>2017-04-28 18:24:55 +0300
committerJean-Michaël Celerier <jeanmichael.celerier@gmail.com>2017-04-28 18:24:55 +0300
commit53138c20fb19991ae62764cff73a802b746ab824 (patch)
treeb355fc9d276d1f2778534e4de46faac64d988461
parent9e6d81de089a282ef779ab6429be6aeb7f27e2c1 (diff)
Add an optional final qualifier to types
When building with GCC's -Wfinal-types, a lot of types of spdlog are marked as being more optimizable if they were marked final. This patch adds a possibility for the user of the library to `#define SPDLOG_FINAL final` and enjoy potentially better performance : GCC is then able to replace virtual calls by true function calls if it can ensure that there are no derived types). By default SPDLOG_FINAL is defined to nothing to not break existing code that may be inheriting of some of these types for some reason.
-rw-r--r--include/spdlog/async_logger.h2
-rw-r--r--include/spdlog/common.h6
-rw-r--r--include/spdlog/details/pattern_formatter_impl.h52
-rw-r--r--include/spdlog/formatter.h2
-rw-r--r--include/spdlog/sinks/ansicolor_sink.h2
-rw-r--r--include/spdlog/sinks/base_sink.h2
-rw-r--r--include/spdlog/sinks/file_sinks.h6
-rw-r--r--include/spdlog/sinks/stdout_sinks.h4
8 files changed, 41 insertions, 35 deletions
diff --git a/include/spdlog/async_logger.h b/include/spdlog/async_logger.h
index cda6be4f..a86d2190 100644
--- a/include/spdlog/async_logger.h
+++ b/include/spdlog/async_logger.h
@@ -31,7 +31,7 @@ namespace details
class async_log_helper;
}
-class async_logger :public logger
+class async_logger SPDLOG_FINAL :public logger
{
public:
template<class It>
diff --git a/include/spdlog/common.h b/include/spdlog/common.h
index a0a227ef..dfecb082 100644
--- a/include/spdlog/common.h
+++ b/include/spdlog/common.h
@@ -29,6 +29,12 @@
#define SPDLOG_CONSTEXPR constexpr
#endif
+// If an user of the library is not inheriting from the types provided by it,
+// he can #define SPDLOG_FINAL final to get additional optimizations
+#if !defined(SPDLOG_FINAL)
+#define SPDLOG_FINAL
+#endif
+
#if defined(__GNUC__) || defined(__clang__)
#define SPDLOG_DEPRECATED __attribute__((deprecated))
#elif defined(_MSC_VER)
diff --git a/include/spdlog/details/pattern_formatter_impl.h b/include/spdlog/details/pattern_formatter_impl.h
index 123024f7..77f0f20b 100644
--- a/include/spdlog/details/pattern_formatter_impl.h
+++ b/include/spdlog/details/pattern_formatter_impl.h
@@ -99,7 +99,7 @@ static const days_array& full_days()
static const days_array arr{ { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" } };
return arr;
}
-class A_formatter:public flag_formatter
+class A_formatter SPDLOG_FINAL :public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -128,7 +128,7 @@ static const months_array& full_months()
static const months_array arr{ { "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" } };
return arr;
}
-class B_formatter:public flag_formatter
+class B_formatter SPDLOG_FINAL :public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -153,7 +153,7 @@ static fmt::MemoryWriter& pad_n_join(fmt::MemoryWriter& w, int v1, int v2, int v
//Date and time representation (Thu Aug 23 15:35:46 2014)
-class c_formatter:public flag_formatter
+class c_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -164,7 +164,7 @@ class c_formatter:public flag_formatter
// year - 2 digit
-class C_formatter:public flag_formatter
+class C_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -175,7 +175,7 @@ class C_formatter:public flag_formatter
// Short MM/DD/YY date, equivalent to %m/%d/%y 08/23/01
-class D_formatter:public flag_formatter
+class D_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -185,7 +185,7 @@ class D_formatter:public flag_formatter
// year - 4 digit
-class Y_formatter:public flag_formatter
+class Y_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -194,7 +194,7 @@ class Y_formatter:public flag_formatter
};
// month 1-12
-class m_formatter:public flag_formatter
+class m_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -203,7 +203,7 @@ class m_formatter:public flag_formatter
};
// day of month 1-31
-class d_formatter:public flag_formatter
+class d_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -212,7 +212,7 @@ class d_formatter:public flag_formatter
};
// hours in 24 format 0-23
-class H_formatter:public flag_formatter
+class H_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -221,7 +221,7 @@ class H_formatter:public flag_formatter
};
// hours in 12 format 1-12
-class I_formatter:public flag_formatter
+class I_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -230,7 +230,7 @@ class I_formatter:public flag_formatter
};
// minutes 0-59
-class M_formatter:public flag_formatter
+class M_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -239,7 +239,7 @@ class M_formatter:public flag_formatter
};
// seconds 0-59
-class S_formatter:public flag_formatter
+class S_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -248,7 +248,7 @@ class S_formatter:public flag_formatter
};
// milliseconds
-class e_formatter:public flag_formatter
+class e_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm&) override
{
@@ -259,7 +259,7 @@ class e_formatter:public flag_formatter
};
// microseconds
-class f_formatter:public flag_formatter
+class f_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm&) override
{
@@ -270,7 +270,7 @@ class f_formatter:public flag_formatter
};
// nanoseconds
-class F_formatter:public flag_formatter
+class F_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm&) override
{
@@ -281,7 +281,7 @@ class F_formatter:public flag_formatter
};
// AM/PM
-class p_formatter:public flag_formatter
+class p_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -291,7 +291,7 @@ class p_formatter:public flag_formatter
// 12 hour clock 02:55:02 pm
-class r_formatter:public flag_formatter
+class r_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -300,7 +300,7 @@ class r_formatter:public flag_formatter
};
// 24-hour HH:MM time, equivalent to %H:%M
-class R_formatter:public flag_formatter
+class R_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -309,7 +309,7 @@ class R_formatter:public flag_formatter
};
// ISO 8601 time format (HH:MM:SS), equivalent to %H:%M:%S
-class T_formatter:public flag_formatter
+class T_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
@@ -319,7 +319,7 @@ class T_formatter:public flag_formatter
// ISO 8601 offset from UTC in timezone (+-HH:MM)
-class z_formatter:public flag_formatter
+class z_formatter SPDLOG_FINAL:public flag_formatter
{
public:
const std::chrono::seconds cache_refresh = std::chrono::seconds(5);
@@ -376,7 +376,7 @@ private:
// Thread id
-class t_formatter:public flag_formatter
+class t_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm&) override
{
@@ -385,7 +385,7 @@ class t_formatter:public flag_formatter
};
// Current pid
-class pid_formatter:public flag_formatter
+class pid_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm&) override
{
@@ -394,7 +394,7 @@ class pid_formatter:public flag_formatter
};
-class v_formatter:public flag_formatter
+class v_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm&) override
{
@@ -402,7 +402,7 @@ class v_formatter:public flag_formatter
}
};
-class ch_formatter:public flag_formatter
+class ch_formatter SPDLOG_FINAL:public flag_formatter
{
public:
explicit ch_formatter(char ch): _ch(ch)
@@ -417,7 +417,7 @@ private:
//aggregate user chars to display as is
-class aggregate_formatter:public flag_formatter
+class aggregate_formatter SPDLOG_FINAL:public flag_formatter
{
public:
aggregate_formatter()
@@ -436,7 +436,7 @@ private:
// Full info formatter
// pattern: [%Y-%m-%d %H:%M:%S.%e] [%n] [%l] %v
-class full_formatter:public flag_formatter
+class full_formatter SPDLOG_FINAL:public flag_formatter
{
void format(details::log_msg& msg, const std::tm& tm_time) override
{
diff --git a/include/spdlog/formatter.h b/include/spdlog/formatter.h
index 0ffcec03..639cc7d2 100644
--- a/include/spdlog/formatter.h
+++ b/include/spdlog/formatter.h
@@ -25,7 +25,7 @@ public:
virtual void format(details::log_msg& msg) = 0;
};
-class pattern_formatter : public formatter
+class pattern_formatter SPDLOG_FINAL : public formatter
{
public:
diff --git a/include/spdlog/sinks/ansicolor_sink.h b/include/spdlog/sinks/ansicolor_sink.h
index 96e10148..d9df4349 100644
--- a/include/spdlog/sinks/ansicolor_sink.h
+++ b/include/spdlog/sinks/ansicolor_sink.h
@@ -21,7 +21,7 @@ namespace sinks
* the output with an ANSI escape sequence color code depending on the severity
* of the message.
*/
-class ansicolor_sink : public sink
+class ansicolor_sink SPDLOG_FINAL : public sink
{
public:
ansicolor_sink(sink_ptr wrapped_sink);
diff --git a/include/spdlog/sinks/base_sink.h b/include/spdlog/sinks/base_sink.h
index 0a539f32..c0a910e0 100644
--- a/include/spdlog/sinks/base_sink.h
+++ b/include/spdlog/sinks/base_sink.h
@@ -31,7 +31,7 @@ public:
base_sink(const base_sink&) = delete;
base_sink& operator=(const base_sink&) = delete;
- void log(const details::log_msg& msg) override
+ void log(const details::log_msg& msg) SPDLOG_FINAL override
{
std::lock_guard<Mutex> lock(_mutex);
_sink_it(msg);
diff --git a/include/spdlog/sinks/file_sinks.h b/include/spdlog/sinks/file_sinks.h
index 721a96df..fe40a362 100644
--- a/include/spdlog/sinks/file_sinks.h
+++ b/include/spdlog/sinks/file_sinks.h
@@ -26,7 +26,7 @@ namespace sinks
* Trivial file sink with single file as target
*/
template<class Mutex>
-class simple_file_sink : public base_sink < Mutex >
+class simple_file_sink SPDLOG_FINAL : public base_sink < Mutex >
{
public:
explicit simple_file_sink(const filename_t &filename, bool truncate = false):_force_flush(false)
@@ -61,7 +61,7 @@ typedef simple_file_sink<details::null_mutex> simple_file_sink_st;
* Rotating file sink based on size
*/
template<class Mutex>
-class rotating_file_sink : public base_sink < Mutex >
+class rotating_file_sink SPDLOG_FINAL : public base_sink < Mutex >
{
public:
rotating_file_sink(const filename_t &base_filename,
@@ -177,7 +177,7 @@ struct dateonly_daily_file_name_calculator
* Rotating file sink based on date. rotates at midnight
*/
template<class Mutex, class FileNameCalc = default_daily_file_name_calculator>
-class daily_file_sink :public base_sink < Mutex >
+class daily_file_sink SPDLOG_FINAL :public base_sink < Mutex >
{
public:
//create daily file sink which rotates on given time
diff --git a/include/spdlog/sinks/stdout_sinks.h b/include/spdlog/sinks/stdout_sinks.h
index c05f80dd..4dd52ed8 100644
--- a/include/spdlog/sinks/stdout_sinks.h
+++ b/include/spdlog/sinks/stdout_sinks.h
@@ -18,7 +18,7 @@ namespace sinks
{
template <class Mutex>
-class stdout_sink: public base_sink<Mutex>
+class stdout_sink SPDLOG_FINAL : public base_sink<Mutex>
{
using MyType = stdout_sink<Mutex>;
public:
@@ -47,7 +47,7 @@ typedef stdout_sink<std::mutex> stdout_sink_mt;
template <class Mutex>
-class stderr_sink: public base_sink<Mutex>
+class stderr_sink SPDLOG_FINAL : public base_sink<Mutex>
{
using MyType = stderr_sink<Mutex>;
public: