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
#include <cstdarg>
#include <cstdio>
#include <cstddef>
#include <cstdint>
#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);
int color_enabled(const Cfg &cfg);
std::string cstr(std::string_view text, std::span<const int> codes);
void cprint(std::string_view text, std::span<const int> codes);
template<class R>
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 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') ||
(c >= 'A' && c <= 'Z') || c == '_';
}
template<class R>
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) {
size_t olen = open.size(), clen = close.size();
size_t p = 0;
-19
View File
@@ -115,25 +115,6 @@ std::string filter_text(std::string_view s) {
int g_col = 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 n = 0;
const unsigned char *p = (const unsigned char *)s.data();