|
37 | 37 | #include <validation.h> |
38 | 38 | #include <validationinterface.h> |
39 | 39 |
|
| 40 | +#include <array> |
| 41 | +#include <cassert> |
40 | 42 | #include <cstddef> |
41 | 43 | #include <cstring> |
42 | 44 | #include <exception> |
|
47 | 49 | #include <span> |
48 | 50 | #include <stdexcept> |
49 | 51 | #include <string> |
| 52 | +#include <string_view> |
50 | 53 | #include <tuple> |
51 | 54 | #include <utility> |
52 | 55 | #include <vector> |
@@ -146,60 +149,52 @@ struct btck_BlockValidationState : Handle<btck_BlockValidationState, BlockValida |
146 | 149 |
|
147 | 150 | namespace { |
148 | 151 |
|
149 | | -BCLog::Level get_bclog_level(btck_LogLevel level) |
| 152 | + |
| 153 | +struct LogLevelMapping { |
| 154 | + util::log::Level bclog; |
| 155 | + std::string_view name; |
| 156 | +}; |
| 157 | + |
| 158 | +// Single source of truth for log level mappings (indexed by btck_LogLevel) |
| 159 | +constexpr auto LOG_LEVELS = [] { |
| 160 | + std::array<LogLevelMapping, 3> a{}; |
| 161 | + a[btck_LogLevel_TRACE] = {util::log::Level::Trace, "trace"}; |
| 162 | + a[btck_LogLevel_DEBUG] = {util::log::Level::Debug, "debug"}; |
| 163 | + a[btck_LogLevel_INFO] = {util::log::Level::Info, "info"}; |
| 164 | + return a; |
| 165 | +}(); |
| 166 | + |
| 167 | +constexpr util::log::Level get_bclog_level(btck_LogLevel level) |
150 | 168 | { |
151 | | - switch (level) { |
152 | | - case btck_LogLevel_INFO: { |
153 | | - return BCLog::Level::Info; |
154 | | - } |
155 | | - case btck_LogLevel_DEBUG: { |
156 | | - return BCLog::Level::Debug; |
157 | | - } |
158 | | - case btck_LogLevel_TRACE: { |
159 | | - return BCLog::Level::Trace; |
160 | | - } |
161 | | - } |
162 | | - assert(false); |
| 169 | + assert(level < LOG_LEVELS.size()); |
| 170 | + return LOG_LEVELS[level].bclog; |
163 | 171 | } |
164 | 172 |
|
165 | | -BCLog::LogFlags get_bclog_flag(btck_LogCategory category) |
| 173 | +struct LogCategoryMapping { |
| 174 | + BCLog::LogFlags bclog; |
| 175 | + std::string_view name; |
| 176 | +}; |
| 177 | + |
| 178 | +// Single source of truth for log category mappings (indexed by btck_LogCategory) |
| 179 | +constexpr auto LOG_CATEGORIES = [] { |
| 180 | + std::array<LogCategoryMapping, 11> a{}; |
| 181 | + a[btck_LogCategory_ALL] = {BCLog::LogFlags::ALL, "all"}; |
| 182 | + a[btck_LogCategory_BENCH] = {BCLog::LogFlags::BENCH, "bench"}; |
| 183 | + a[btck_LogCategory_BLOCKSTORAGE] = {BCLog::LogFlags::BLOCKSTORAGE, "blockstorage"}; |
| 184 | + a[btck_LogCategory_COINDB] = {BCLog::LogFlags::COINDB, "coindb"}; |
| 185 | + a[btck_LogCategory_LEVELDB] = {BCLog::LogFlags::LEVELDB, "leveldb"}; |
| 186 | + a[btck_LogCategory_MEMPOOL] = {BCLog::LogFlags::MEMPOOL, "mempool"}; |
| 187 | + a[btck_LogCategory_PRUNE] = {BCLog::LogFlags::PRUNE, "prune"}; |
| 188 | + a[btck_LogCategory_RAND] = {BCLog::LogFlags::RAND, "rand"}; |
| 189 | + a[btck_LogCategory_REINDEX] = {BCLog::LogFlags::REINDEX, "reindex"}; |
| 190 | + a[btck_LogCategory_VALIDATION] = {BCLog::LogFlags::VALIDATION, "validation"}; |
| 191 | + a[btck_LogCategory_KERNEL] = {BCLog::LogFlags::KERNEL, "kernel"}; |
| 192 | + return a; |
| 193 | +}(); |
| 194 | + |
| 195 | +constexpr BCLog::LogFlags get_bclog_flag(btck_LogCategory category) |
166 | 196 | { |
167 | | - switch (category) { |
168 | | - case btck_LogCategory_BENCH: { |
169 | | - return BCLog::LogFlags::BENCH; |
170 | | - } |
171 | | - case btck_LogCategory_BLOCKSTORAGE: { |
172 | | - return BCLog::LogFlags::BLOCKSTORAGE; |
173 | | - } |
174 | | - case btck_LogCategory_COINDB: { |
175 | | - return BCLog::LogFlags::COINDB; |
176 | | - } |
177 | | - case btck_LogCategory_LEVELDB: { |
178 | | - return BCLog::LogFlags::LEVELDB; |
179 | | - } |
180 | | - case btck_LogCategory_MEMPOOL: { |
181 | | - return BCLog::LogFlags::MEMPOOL; |
182 | | - } |
183 | | - case btck_LogCategory_PRUNE: { |
184 | | - return BCLog::LogFlags::PRUNE; |
185 | | - } |
186 | | - case btck_LogCategory_RAND: { |
187 | | - return BCLog::LogFlags::RAND; |
188 | | - } |
189 | | - case btck_LogCategory_REINDEX: { |
190 | | - return BCLog::LogFlags::REINDEX; |
191 | | - } |
192 | | - case btck_LogCategory_VALIDATION: { |
193 | | - return BCLog::LogFlags::VALIDATION; |
194 | | - } |
195 | | - case btck_LogCategory_KERNEL: { |
196 | | - return BCLog::LogFlags::KERNEL; |
197 | | - } |
198 | | - case btck_LogCategory_ALL: { |
199 | | - return BCLog::LogFlags::ALL; |
200 | | - } |
201 | | - } |
202 | | - assert(false); |
| 197 | + return LOG_CATEGORIES[category].bclog; |
203 | 198 | } |
204 | 199 |
|
205 | 200 | btck_SynchronizationState cast_state(SynchronizationState state) |
@@ -787,6 +782,20 @@ void btck_logging_connection_destroy(btck_LoggingConnection* connection) |
787 | 782 | delete connection; |
788 | 783 | } |
789 | 784 |
|
| 785 | +btck_StringView btck_log_level_get_name(btck_LogLevel level) |
| 786 | +{ |
| 787 | + assert(level < LOG_LEVELS.size()); |
| 788 | + const auto& name{LOG_LEVELS[level].name}; |
| 789 | + return {name.data(), name.size()}; |
| 790 | +} |
| 791 | + |
| 792 | +btck_StringView btck_log_category_get_name(btck_LogCategory category) |
| 793 | +{ |
| 794 | + assert(category < LOG_CATEGORIES.size()); |
| 795 | + const auto& name{LOG_CATEGORIES[category].name}; |
| 796 | + return {name.data(), name.size()}; |
| 797 | +} |
| 798 | + |
790 | 799 | btck_ChainParameters* btck_chain_parameters_create(const btck_ChainType chain_type) |
791 | 800 | { |
792 | 801 | switch (chain_type) { |
|
0 commit comments