From de5efc81702ce3376093fe3ea9c9538ae1fcba73 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Tue, 13 Feb 2018 15:26:24 +0100 Subject: [PATCH] log: remove SubsystemMap::m_max_name_len. Signed-off-by: Radoslaw Zarzynski --- src/common/subsys_types.h | 24 ++++++++++++++++++++++++ src/log/SubsystemMap.h | 14 ++++---------- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/src/common/subsys_types.h b/src/common/subsys_types.h index a87ea1a0f3a..385fbc4209f 100644 --- a/src/common/subsys_types.h +++ b/src/common/subsys_types.h @@ -15,6 +15,7 @@ #ifndef CEPH_SUBSYS_TYPES_H #define CEPH_SUBSYS_TYPES_H +#include #include enum ceph_subsys_id_t { @@ -52,5 +53,28 @@ ceph_subsys_get_as_array() { #undef DEFAULT_SUBSYS } +// Compile time-capable version of std::strlen. Resorting to own +// implementation only because C++17 doesn't mandate constexpr +// on the standard one. +constexpr static std::size_t strlen_ct(const char* const s) { + std::size_t l = 0; + while (s[l] != '\0') { + ++l; + } + return l; +} + +constexpr static std::size_t ceph_subsys_max_name_length() { + return std::max({ +#define SUBSYS(name, log, gather) \ + strlen_ct(#name), +#define DEFAULT_SUBSYS(log, gather) \ + strlen_ct("none"), +#include "common/subsys.h" +#undef SUBSYS +#undef DEFAULT_SUBSYS + }); +} + #endif // CEPH_SUBSYS_TYPES_H diff --git a/src/log/SubsystemMap.h b/src/log/SubsystemMap.h index 5266df7bc31..508263d1ba6 100644 --- a/src/log/SubsystemMap.h +++ b/src/log/SubsystemMap.h @@ -26,13 +26,10 @@ class SubsystemMap { // lines. Access can be slow. std::vector m_subsys; - // TODO(rzarzynski): knock this out with constexpr. - unsigned m_max_name_len = 0; - friend class Log; public: - SubsystemMap() : m_max_name_len(0) { + SubsystemMap() { constexpr auto s = ceph_subsys_get_as_array(); m_subsys.reserve(s.size()); @@ -40,18 +37,15 @@ public: for (const ceph_subsys_item_t& item : s) { m_subsys.emplace_back(item); m_gather_levels[i++] = std::max(item.log_level, item.gather_level); - - m_max_name_len = std::max(m_max_name_len, - static_cast(strlen(item.name))); } } - constexpr static size_t get_num() { + constexpr static std::size_t get_num() { return ceph_subsys_get_num(); } - int get_max_subsys_len() const { - return m_max_name_len; + constexpr static std::size_t get_max_subsys_len() { + return ceph_subsys_max_name_length(); } int get_log_level(unsigned subsys) const { -- 2.39.5