HikoGUI
A low latency retained GUI
Loading...
Searching...
No Matches
format_check.hpp
1// Copyright Take Vos 2022.
2// Distributed under the Boost Software License, Version 1.0.
3// (See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt)
4
5#pragma once
6
7#include "../utility/utility.hpp"
8#include "../macros.hpp"
9#include <string_view>
10#include <type_traits>
11
12hi_export_module(hikogui.telemetry.format_check);
13
14
15hi_export namespace hi::inline v1 {
16
25constexpr int format_count(std::string_view fmt) noexcept
26{
27 auto num_args = 0;
28 auto o_count = 0;
29 auto c_count = 0;
30 auto is_open = false;
31 auto prev = ' ';
32 for (auto c : fmt) {
33 if (c != prev) {
34 if (o_count % 2) {
35 if (is_open) {
36 return -1;
37 }
38 is_open = true;
39
40 } else if (c_count % 2) {
41 if (not is_open) {
42 return -2;
43 }
44 ++num_args;
45 is_open = false;
46 }
47 }
48
49 o_count = c == '{' ? o_count + 1 : 0;
50 c_count = c == '}' ? c_count + 1 : 0;
51 prev = c;
52 }
53
54 if (c_count % 2) {
55 if (not is_open) {
56 return -2;
57 }
58 ++num_args;
59
60 } else if (is_open) {
61 return -3;
62 }
63
64 return num_args;
65}
66
67} // namespace hi::inline v1
DOXYGEN BUG.
Definition algorithm_misc.hpp:20
constexpr int format_count(std::string_view fmt) noexcept
Count arguments of a std::format format string.
Definition format_check.hpp:25