summaryrefslogtreecommitdiffstats
path: root/src/btop_tools.hpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/btop_tools.hpp')
-rw-r--r--src/btop_tools.hpp245
1 files changed, 245 insertions, 0 deletions
diff --git a/src/btop_tools.hpp b/src/btop_tools.hpp
new file mode 100644
index 0000000..c9fc091
--- /dev/null
+++ b/src/btop_tools.hpp
@@ -0,0 +1,245 @@
+/* Copyright 2021 Aristocratos (jakob@qvantnet.com)
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+
+indent = tab
+tab-size = 4
+*/
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include <regex>
+#include <atomic>
+#include <filesystem>
+#include <ranges>
+
+
+using std::string, std::vector;
+
+
+//? ------------------------------------------------- NAMESPACES ------------------------------------------------------
+
+namespace Global {
+ extern string Version;
+}
+
+//* Collection of escape codes for text style and formatting
+namespace Fx {
+ extern const string e; //* Escape sequence start
+ extern const string b; //* Bold on/off
+ extern const string ub; //* Bold off
+ extern const string d; //* Dark on
+ extern const string ud; //* Dark off
+ extern const string i; //* Italic on
+ extern const string ui; //* Italic off
+ extern const string ul; //* Underline on
+ extern const string uul; //* Underline off
+ extern const string bl; //* Blink on
+ extern const string ubl; //* Blink off
+ extern const string s; //* Strike/crossed-out on
+ extern const string us; //* Strike/crossed-out on/off
+
+ //* Reset foreground/background color and text effects
+ extern const string reset_base;
+
+ //* Reset text effects and restore theme foregrund and background color
+ extern string reset;
+
+ //* Regex for matching color, style and curse move escape sequences
+ extern const std::regex escape_regex;
+
+ //* Regex for matching only color and style escape sequences
+ extern const std::regex color_regex;
+
+ //* Return a string with all colors and text styling removed
+ string uncolor(string& s);
+}
+
+//* Collection of escape codes and functions for cursor manipulation
+namespace Mv {
+ //* Move cursor to <line>, <column>
+ const string to(int line, int col);
+
+ //* Move cursor right <x> columns
+ const string r(int x);
+
+ //* Move cursor left <x> columns
+ const string l(int x);
+
+ //* Move cursor up x lines
+ const string u(int x);
+
+ //* Move cursor down x lines
+ const string d(int x);
+
+ //* Save cursor position
+ extern const string save;
+
+ //* Restore saved cursor postion
+ extern const string restore;
+}
+
+//* Collection of escape codes and functions for terminal manipulation
+namespace Term {
+ extern bool initialized;
+ extern bool resized;
+ extern uint width;
+ extern uint height;
+ extern string fg, bg, current_tty;
+
+ //* Hide terminal cursor
+ extern const string hide_cursor;
+
+ //* Show terminal cursor
+ extern const string show_cursor;
+
+ //* Switch to alternate screen
+ extern const string alt_screen;
+
+ //* Switch to normal screen
+ extern const string normal_screen;
+
+ //* Clear screen and set cursor to position 0,0
+ extern const string clear;
+
+ //* Clear from cursor to end of screen
+ extern const string clear_end;
+
+ //* Clear from cursor to beginning of screen
+ extern const string clear_begin;
+
+ //* Enable reporting of mouse position on click and release
+ extern const string mouse_on;
+
+ //* Disable mouse reporting
+ extern const string mouse_off;
+
+ //* Enable reporting of mouse position at any movement
+ extern const string mouse_direct_on;
+
+ //* Disable direct mouse reporting
+ extern const string mouse_direct_off;
+
+ //* Refresh variables holding current terminal width and height and return true if resized
+ bool refresh();
+
+ //* Check for a valid tty, save terminal options and set new options
+ bool init();
+
+ //* Restore terminal options
+ void restore();
+}
+
+//? --------------------------------------------------- FUNCTIONS -----------------------------------------------------
+
+namespace Tools {
+ const auto SSmax = std::numeric_limits<std::streamsize>::max();
+
+ //* Return number of UTF8 characters in a string with option to disregard escape sequences
+ size_t ulen(string str, const bool escape=false);
+
+ //* Resize a string consisting of UTF8 characters (only reduces size)
+ string uresize(string str, const size_t len);
+
+ //* Check if vector <vec> contains value <find_val>
+ template <typename T>
+ bool v_contains(vector<T>& vec, T find_val) {
+ return std::ranges::find(vec, find_val) != vec.end();
+ }
+
+ //* Return index of <find_val> from vector <vec>, returns size of <vec> if <find_val> is not present
+ template <typename T>
+ size_t v_index(vector<T>& vec, T find_val) {
+ return std::ranges::distance(vec.begin(), std::ranges::find(vec, find_val));
+ }
+
+ //* Return current time since epoch in seconds
+ uint64_t time_s();
+
+ //* Return current time since epoch in milliseconds
+ uint64_t time_ms();
+
+ //* Return current time since epoch in microseconds
+ uint64_t time_micros();
+
+ //* Check if a string is a valid bool value
+ bool isbool(string& str);
+
+ //* Convert string to bool, returning any value not equal to "true" or "True" as false
+ bool stobool(string& str);
+
+ //* Check if a string is a valid integer value
+ bool isint(string& str);
+
+ //* Left-trim <t_str> from <str> and return new string
+ string ltrim(const string& str, const string t_str = " ");
+
+ //* Right-trim <t_str> from <str> and return new string
+ string rtrim(const string& str, const string t_str = " ");
+
+ //* Left-right-trim <t_str> from <str> and return new string
+ string trim(const string& str, const string t_str = " ");
+
+ //* Split <string> at all occurrences of <delim> and return as vector of strings
+ vector<string> ssplit(const string& str, const char delim = ' ');
+
+ //* Put current thread to sleep for <ms> milliseconds
+ void sleep_ms(const uint& ms);
+
+ //* Left justify string <str> if <x> is greater than <str> length, limit return size to <x> by default
+ string ljust(string str, const size_t x, bool utf=false, bool escape=false, bool lim=true);
+
+ //* Right justify string <str> if <x> is greater than <str> length, limit return size to <x> by default
+ string rjust(string str, const size_t x, bool utf=false, bool escape=false, bool lim=true);
+
+ //* Replace whitespaces " " with escape code for move right
+ string trans(const string& str);
+
+ //* Convert seconds to format "Xd HH:MM:SS" and return string
+ string sec_to_dhms(uint sec);
+
+ //* Scales up in steps of 1024 to highest possible unit and returns string with unit suffixed
+ //* bit=True or defaults to bytes
+ //* start=int to set 1024 multiplier starting unit
+ //* short=True always returns 0 decimals and shortens unit to 1 character
+ string floating_humanizer(uint64_t value, bool shorten=false, uint start=0, bool bit=false, bool per_second=false);
+
+ //* Add std::string operator "*" : Repeat string <str> <n> number of times
+ std::string operator*(string str, size_t n);
+
+ //* Return current time in <strf> format
+ string strf_time(string strf);
+
+ //* Waits for <atom> to not be <val>
+ void atomic_wait(std::atomic<bool>& atom, bool val=true);
+
+ //* Waits for <atom> to not be <val> and then sets it to <val> again
+ void atomic_wait_set(std::atomic<bool>& atom, bool val=true);
+
+}
+
+//* Simple logging implementation
+namespace Logger {
+ extern vector<string> log_levels;
+ extern std::filesystem::path logfile;
+
+ void set(string level); //* Set log level, valid arguments: "DISABLED", "ERROR", "WARNING", "INFO" and "DEBUG"
+ void log_write(uint level, string& msg);
+ void error(string msg);
+ void warning(string msg);
+ void info(string msg);
+ void debug(string msg);
+}
+