logman 0.1.0
Modern C++23 header-only logging manager wrapping spdlog with channels, listeners, and structured events
Loading...
Searching...
No Matches
env_prefixes.hpp
Go to the documentation of this file.
1#pragma once
2
7
8#include <array>
9#include <span>
10#include <string_view>
11
12#define LOGMAN_DEFAULT_ENV_PREFIXES_RAW "LOGMAN_"
13
14namespace logman {
15
16namespace detail {
17
18inline constexpr std::string_view k_default_env_prefixes_raw = LOGMAN_DEFAULT_ENV_PREFIXES_RAW;
19
20consteval std::size_t count_prefixes() {
21 if (k_default_env_prefixes_raw.empty()) {
22 return 0;
23 }
24 std::size_t n = 1;
25 for (char c : k_default_env_prefixes_raw) {
26 if (c == ';') {
27 ++n;
28 }
29 }
30 return n;
31}
32
33template <std::size_t N>
34consteval std::array<std::string_view, N> parse_prefixes() {
35 std::array<std::string_view, N> out{};
36 std::size_t idx = 0;
37 std::size_t start = 0;
38 for (std::size_t i = 0; i < k_default_env_prefixes_raw.size(); ++i) {
39 if (k_default_env_prefixes_raw[i] == ';') {
40 out[idx++] = k_default_env_prefixes_raw.substr(start, i - start);
41 start = i + 1;
42 }
43 }
44 if (idx < N) {
45 out[idx] = k_default_env_prefixes_raw.substr(start);
46 }
47 return out;
48}
49
50inline constexpr auto k_default_env_prefixes_storage =
51 parse_prefixes<count_prefixes()>();
52
53} // namespace detail
54
59inline constexpr std::span<const std::string_view> default_env_prefixes{
60 detail::k_default_env_prefixes_storage};
61
62} // namespace logman
constexpr std::span< const std::string_view > default_env_prefixes
Prefixes (including the trailing underscore) the runtime scans for env vars during LogManager::initia...
Definition env_prefixes.hpp:59