Colorful display.
This commit is contained in:
parent
1aa40b88e7
commit
3b32b11fa6
50
main.cpp
50
main.cpp
|
@ -366,6 +366,55 @@ never_inline bool json_parse(const u8 * buf, UNUSED size_t len, ParsedJson & pj)
|
|||
return true;
|
||||
}
|
||||
|
||||
// https://stackoverflow.com/questions/2616906/how-do-i-output-coloured-text-to-a-linux-terminal
|
||||
namespace Color {
|
||||
enum Code {
|
||||
FG_DEFAULT = 39, FG_BLACK = 30, FG_RED = 31, FG_GREEN = 32,
|
||||
FG_YELLOW = 33, FG_BLUE = 34, FG_MAGENTA = 35, FG_CYAN = 36,
|
||||
FG_LIGHT_GRAY = 37, FG_DARK_GRAY = 90, FG_LIGHT_RED = 91,
|
||||
FG_LIGHT_GREEN = 92, FG_LIGHT_YELLOW = 93, FG_LIGHT_BLUE = 94,
|
||||
FG_LIGHT_MAGENTA = 95, FG_LIGHT_CYAN = 96, FG_WHITE = 97,
|
||||
BG_RED = 41, BG_GREEN = 42, BG_BLUE = 44, BG_DEFAULT = 49
|
||||
};
|
||||
class Modifier {
|
||||
Code code;
|
||||
public:
|
||||
Modifier(Code pCode) : code(pCode) {}
|
||||
friend std::ostream&
|
||||
operator<<(std::ostream& os, const Modifier& mod) {
|
||||
return os << "\033[" << mod.code << "m";
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
void colorfuldisplay(ParsedJson & pj, const u8 * buf) {
|
||||
Color::Modifier greenfg(Color::FG_GREEN);
|
||||
Color::Modifier yellowfg(Color::FG_YELLOW);
|
||||
Color::Modifier deffg(Color::FG_DEFAULT);
|
||||
size_t i = 0;
|
||||
// skip initial fluff
|
||||
while((i+1< pj.n_structural_indexes) && (pj.structural_indexes[i]==pj.structural_indexes[i+1])){
|
||||
i++;
|
||||
}
|
||||
for (; i < pj.n_structural_indexes; i++) {
|
||||
u32 idx = pj.structural_indexes[i];
|
||||
u8 c = buf[idx];
|
||||
if (((c & 0xdf) == 0x5b)) { // meaning 7b or 5b, { or [
|
||||
std::cout << greenfg << buf[idx] << deffg;
|
||||
} else if (((c & 0xdf) == 0x5d)) { // meaning 7d or 5d, } or ]
|
||||
std::cout << greenfg << buf[idx] << deffg;
|
||||
} else {
|
||||
std::cout << yellowfg << buf[idx] << deffg;
|
||||
}
|
||||
if(i + 1 < pj.n_structural_indexes) {
|
||||
u32 nextidx = pj.structural_indexes[i + 1];
|
||||
for(u32 pos = idx + 1 ; pos < nextidx; pos++) {
|
||||
std::cout << buf[pos];
|
||||
}
|
||||
}
|
||||
}
|
||||
std::cout << std::endl;
|
||||
}
|
||||
int main(int argc, char * argv[]) {
|
||||
if (argc != 2) {
|
||||
cerr << "Usage: " << argv[0] << " <jsonfile>\n";
|
||||
|
@ -404,6 +453,7 @@ int main(int argc, char * argv[]) {
|
|||
std::chrono::duration<double> secs = end - start;
|
||||
res[i] = secs.count();
|
||||
}
|
||||
colorfuldisplay(pj, p.first);
|
||||
double min_result = *min_element(res.begin(), res.end());
|
||||
cout << "Min: " << min_result << " bytes read: " << p.second << " Gigabytes/second: " << (p.second) / (min_result * 1000000000.0) << "\n";
|
||||
return 0;
|
||||
|
|
Loading…
Reference in New Issue