perf fix alpine x86

This commit is contained in:
Luxferre
2026-10-14 07:10:03 +00:00
parent e63b5d2b01
commit 22a29d2020
3 changed files with 23 additions and 22 deletions
+21 -2
View File
@@ -20,6 +20,7 @@
#define BANTAM_HPP #define BANTAM_HPP
#include <cstdarg> #include <cstdarg>
#include <cstdio>
#include <cstddef> #include <cstddef>
#include <cstdint> #include <cstdint>
#include <map> #include <map>
@@ -171,8 +172,26 @@ std::string_view utf8_truncate(std::string_view s, size_t max_bytes);
std::string filter_text(std::string_view s); std::string filter_text(std::string_view s);
int color_enabled(const Cfg &cfg); int color_enabled(const Cfg &cfg);
std::string cstr(std::string_view text, std::span<const int> codes); template<class R>
void cprint(std::string_view text, std::span<const int> codes); inline std::string cstr(std::string_view text, const R& codes) {
if (!g_col || codes.empty() || text.empty()) return std::string(text);
std::string s;
s.reserve(text.size() + 16);
s += "\033[";
for (size_t i = 0; i < codes.size(); i++) {
if (i) s += ';';
s += sfmt("%d", (int)codes[i]);
}
s += "m";
s += text;
s += "\033[0m";
return s;
}
template<class R>
inline void cprint(std::string_view text, const R& codes) {
std::string w = cstr(text, codes);
std::fputs(w.c_str(), stdout);
}
int visible_len(std::string_view s); int visible_len(std::string_view s);
int rune_width(int cp); int rune_width(int cp);
+2 -1
View File
@@ -59,8 +59,9 @@ static bool is_word_byte(unsigned char c) {
return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') || return (c >= '0' && c <= '9') || (c >= 'a' && c <= 'z') ||
(c >= 'A' && c <= 'Z') || c == '_'; (c >= 'A' && c <= 'Z') || c == '_';
} }
template<class R>
static void wrap_pairs(std::string &dst, std::string_view src, std::string_view open, static void wrap_pairs(std::string &dst, std::string_view src, std::string_view open,
std::string_view close, std::span<const int> codes, std::string_view close, const R& codes,
bool boundary = false) { bool boundary = false) {
size_t olen = open.size(), clen = close.size(); size_t olen = open.size(), clen = close.size();
size_t p = 0; size_t p = 0;
-19
View File
@@ -115,25 +115,6 @@ std::string filter_text(std::string_view s) {
int g_col = 0; int g_col = 0;
volatile int g_interrupted = 0; volatile int g_interrupted = 0;
std::string cstr(std::string_view text, std::span<const int> codes) {
if (!g_col || codes.empty() || text.empty()) return std::string(text);
std::string s;
s.reserve(text.size() + 16);
s += "\033[";
for (size_t i = 0; i < codes.size(); i++) {
if (i) s += ';';
s += sfmt("%d", codes[i]);
}
s += "m";
s += text;
s += "\033[0m";
return s;
}
void cprint(std::string_view text, std::span<const int> codes) {
std::string w = cstr(text, codes);
std::fputs(w.c_str(), stdout);
}
int visible_len(std::string_view s) { int visible_len(std::string_view s) {
int n = 0; int n = 0;
const unsigned char *p = (const unsigned char *)s.data(); const unsigned char *p = (const unsigned char *)s.data();