perf fix alpine x86
This commit is contained in:
+21
-2
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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();
|
||||||
|
|||||||
Reference in New Issue
Block a user