diff --git a/CMakeLists.txt b/CMakeLists.txt index d11a250..3b5567d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -88,7 +88,7 @@ endif() # TODO: enable more warnings in coordination with upstream target_compile_options(btop PRIVATE - -Wall -Wextra -Wpedantic + -Wall -Wextra -Wpedantic -Wold-style-cast -ftree-vectorize -fstack-clash-protection ) if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") @@ -99,7 +99,7 @@ endif() if(BTOP_PEDANTIC) target_compile_options(btop PRIVATE - -Wshadow -Wnon-virtual-dtor -Wold-style-cast -Wcast-align -Wunused + -Wshadow -Wnon-virtual-dtor -Wcast-align -Wunused -Woverloaded-virtual -Wconversion -Wsign-conversion -Wdouble-promotion -Wformat=2 -Wimplicit-fallthrough -Weffc++ ) diff --git a/Makefile b/Makefile index 01e98d5..ebe5cae 100644 --- a/Makefile +++ b/Makefile @@ -170,7 +170,7 @@ override GOODFLAGS := $(foreach flag,$(TESTFLAGS),$(strip $(shell echo "int main #? Flags, Libraries and Includes override REQFLAGS := -std=c++20 -WARNFLAGS := -Wall -Wextra -pedantic +WARNFLAGS := -Wall -Wextra -pedantic -Wold-style-cast OPTFLAGS := -O2 -ftree-vectorize -flto=$(LTO) LDCXXFLAGS := -pthread -D_FORTIFY_SOURCE=2 -D_GLIBCXX_ASSERTIONS -D_FILE_OFFSET_BITS=64 $(GOODFLAGS) $(ADDFLAGS) override CXXFLAGS += $(REQFLAGS) $(LDCXXFLAGS) $(OPTFLAGS) $(WARNFLAGS) diff --git a/src/btop.cpp b/src/btop.cpp index e53ec02..44626e7 100644 --- a/src/btop.cpp +++ b/src/btop.cpp @@ -56,7 +56,6 @@ using std::cout; using std::flush; using std::min; using std::string; -using std::string_view; using std::to_string; using std::vector; @@ -753,9 +752,9 @@ int main(int argc, char **argv) { if (argc > 1) argumentParser(argc, argv); //? Setup paths for config, log and user themes - for (const auto& env : {"XDG_CONFIG_HOME", "HOME"}) { - if (std::getenv(env) != nullptr and access(std::getenv(env), W_OK) != -1) { - Config::conf_dir = fs::path(std::getenv(env)) / (((string)env == "HOME") ? ".config/btop" : "btop"); + for (const std::string_view env : {"XDG_CONFIG_HOME", "HOME"}) { + if (std::getenv(env.data()) != nullptr and access(std::getenv(env.data()), W_OK) != -1) { + Config::conf_dir = fs::path(std::getenv(env.data())) / ((env.compare("HOME") == 0) ? ".config/btop" : "btop"); break; } } @@ -821,15 +820,15 @@ int main(int argc, char **argv) { } //? Try to find and set a UTF-8 locale - if (std::setlocale(LC_ALL, "") != nullptr and not s_contains((string)std::setlocale(LC_ALL, ""), ";") - and str_to_upper(s_replace((string)std::setlocale(LC_ALL, ""), "-", "")).ends_with("UTF8")) { - Logger::debug("Using locale " + (string)std::setlocale(LC_ALL, "")); + if (std::setlocale(LC_ALL, "") != nullptr and not s_contains(std::setlocale(LC_ALL, ""), ";") + and str_to_upper(s_replace(std::setlocale(LC_ALL, ""), "-", "")).ends_with("UTF8")) { + Logger::debug("Using locale " + static_cast(std::setlocale(LC_ALL, ""))); } else { string found; bool set_failure{}; // defaults to false for (const auto loc_env : array{"LANG", "LC_ALL"}) { - if (std::getenv(loc_env) != nullptr and str_to_upper(s_replace((string)std::getenv(loc_env), "-", "")).ends_with("UTF8")) { + if (std::getenv(loc_env) != nullptr and str_to_upper(s_replace(std::getenv(loc_env), "-", "")).ends_with("UTF8")) { found = std::getenv(loc_env); if (std::setlocale(LC_ALL, found.c_str()) == nullptr) { set_failure = true; @@ -858,7 +857,7 @@ int main(int argc, char **argv) { #ifdef __APPLE__ if (found.empty()) { CFLocaleRef cflocale = CFLocaleCopyCurrent(); - CFStringRef id_value = (CFStringRef)CFLocaleGetValue(cflocale, kCFLocaleIdentifier); + CFStringRef id_value = static_cast(CFLocaleGetValue(cflocale, kCFLocaleIdentifier)); auto loc_id = CFStringGetCStringPtr(id_value, kCFStringEncodingUTF8); CFRelease(cflocale); std::string cur_locale = (loc_id != nullptr ? loc_id : ""); @@ -951,7 +950,7 @@ int main(int argc, char **argv) { //? Calculate sizes of all boxes Config::presetsValid(Config::getS("presets")); if (Global::arg_preset >= 0) { - Config::current_preset = min(Global::arg_preset, (int)Config::preset_list.size() - 1); + Config::current_preset = min(Global::arg_preset, static_cast(Config::preset_list.size()) - 1); Config::apply_preset(Config::preset_list.at(Config::current_preset)); } @@ -1020,7 +1019,7 @@ int main(int argc, char **argv) { future_time = current_time; //? Poll for input and process any input detected - else if (Input::poll(min((uint64_t)1000, future_time - current_time))) { + else if (Input::poll(min(static_cast(1000), future_time - current_time))) { if (not Runner::active) Config::unlock(); if (Menu::active) Menu::process(Input::get()); diff --git a/src/btop_draw.cpp b/src/btop_draw.cpp index a4cbb95..4faf0d8 100644 --- a/src/btop_draw.cpp +++ b/src/btop_draw.cpp @@ -208,7 +208,7 @@ namespace Draw { return Fx::ul + " " + Fx::uul; if (limit > 0 and ulen(text) + 1 > limit) { try { - const size_t half = (size_t)round((double)limit / 2); + const size_t half = round(limit / 2.0); string first; if (upos + half > ulen(text)) @@ -366,7 +366,7 @@ namespace Draw { if (not cache.at(value).empty()) return cache.at(value); auto& out = cache.at(value); for (const int& i : iota(1, width + 1)) { - int y = round((double)i * 100.0 / width); + int y = round(i * 100.0 / width); if (value >= y) out += Theme::g(color_gradient).at(invert ? 100 - y : y) + Symbols::meter; else { @@ -391,7 +391,7 @@ namespace Draw { } //? Horizontal iteration over values in - for (const int& i : iota(data_offset, (int)data.size())) { + for (const int& i : iota(data_offset, static_cast(data.size()))) { // if (tty_mode and mult and i % 2 != 0) continue; if (not tty_mode and mult) current = not current; if (i < 0) { @@ -415,7 +415,7 @@ namespace Draw { else if (value <= cur_low) result[ai++] = clamp_min; else { - result[ai++] = clamp((int)round((float)(value - cur_low) * 4 / (cur_high - cur_low) + mod), clamp_min, 4); + result[ai++] = clamp(static_cast(round((value - cur_low) * 4.0 / (cur_high - cur_low) + mod)), clamp_min, 4); } } //? Generate graph symbol from 5x5 2D vector @@ -462,7 +462,7 @@ namespace Draw { if (max_value == 0 and offset > 0) max_value = 100; this->max_value = max_value; - const int value_width = (tty_mode ? data.size() : ceil((double)data.size() / 2)); + const int value_width = (tty_mode ? data.size() : ceil(data.size() / 2.0)); int data_offset = (value_width > width) ? data.size() - width * (tty_mode ? 1 : 2) : 0; if (not tty_mode and (data.size() - data_offset) % 2 != 0) { @@ -491,7 +491,7 @@ namespace Draw { else if (graphs.at(current).at(i).at(0) == ' ') graphs.at(current).at(i).erase(0, 1); else graphs.at(current).at(i).erase(0, 3); } - this->_create(data, (int)data.size() - 1); + this->_create(data, static_cast(data.size()) - 1); return out; } @@ -544,7 +544,7 @@ namespace Cpu { //* Redraw elements not needed to be updated every cycle if (redraw) { mid_line = (not single_graph and graph_up_field != graph_lo_field); - graph_up_height = (single_graph ? height - 2 : ceil((double)(height - 2) / 2) - (mid_line and height % 2 != 0 ? 1 : 0)); + graph_up_height = (single_graph ? height - 2 : ceil((height - 2.0) / 2.0) - (mid_line and height % 2 != 0 ? 1 : 0)); const int graph_low_height = height - 2 - graph_up_height - (mid_line ? 1 : 0); const int button_y = cpu_bottom ? y + height - 1 : y; out += box; @@ -558,7 +558,7 @@ namespace Cpu { const string update = to_string(Config::getI("update_ms")) + "ms"; out += Mv::to(button_y, x + width - update.size() - 8) + title_left + Fx::b + Theme::c("hi_fg") + "- " + Theme::c("title") + update + Theme::c("hi_fg") + " +" + Fx::ub + title_right; - Input::mouse_mappings["-"] = {button_y, x + width - (int)update.size() - 7, 1, 2}; + Input::mouse_mappings["-"] = {button_y, x + width - static_cast(update.size()) - 7, 1, 2}; Input::mouse_mappings["+"] = {button_y, x + width - 5, 1, 2}; //? Graphs & meters @@ -592,7 +592,7 @@ namespace Cpu { temp_graphs.clear(); temp_graphs.emplace_back(5, 1, "temp", cpu.temp.at(0), graph_symbol, false, false, cpu.temp_max, -23); if (not hide_cores and b_column_size > 1) { - for (const auto& i : iota((size_t)1, cpu.temp.size())) { + for (const auto& i : iota(static_cast(1), cpu.temp.size())) { temp_graphs.emplace_back(5, 1, "temp", cpu.temp.at(i), graph_symbol, false, false, cpu.temp_max, -23); } } @@ -699,7 +699,7 @@ namespace Cpu { out += Theme::c("div_line") + Symbols::v_line; - if ((++cy > ceil((double)Shared::coreCount / b_columns) or cy == b_height - 2) and n != Shared::coreCount - 1) { + if ((++cy > ceil(static_cast(Shared::coreCount) / b_columns) or cy == b_height - 2) and n != Shared::coreCount - 1) { if (++cc >= b_columns) break; cy = 1; cx = (b_width / b_columns) * cc; } @@ -714,7 +714,7 @@ namespace Cpu { else if (b_column_size == 1 or (b_column_size == 0 and show_temps)) { lavg_pre = "L"; } string lavg; for (const auto& val : cpu.load_avg) { - lavg += string(sep, ' ') + (lavg_pre.size() < 3 ? to_string((int)round(val)) : to_string(val).substr(0, 4)); + lavg += string(sep, ' ') + (lavg_pre.size() < 3 ? to_string(static_cast(round(val))) : to_string(val).substr(0, 4)); } string lavg_str = lavg_pre + lavg; @@ -804,8 +804,8 @@ namespace Mem { unordered_flat_map custom_speeds; int half_height = 0; if (io_mode) { - disks_io_h = max((int)floor((double)(height - 2 - (disk_ios * 2)) / max(1, disk_ios)), (io_graph_combined ? 1 : 2)); - half_height = ceil((double)disks_io_h / 2); + disks_io_h = max(static_cast(floor((height - 2.0 - (disk_ios * 2.0)) / max(1, disk_ios))), (io_graph_combined ? 1 : 2)); + half_height = ceil(disks_io_h / 2.0); if (not Config::getS("io_graph_speeds").empty()) { auto split = ssplit(Config::getS("io_graph_speeds")); @@ -893,7 +893,7 @@ namespace Mem { if (title.empty()) title = capitalize(name); const string humanized = floating_humanizer(mem.stats.at(name)); - const int offset = max(0, divider.empty() ? 9 - (int)humanized.size() : 0); + const int offset = max(0, divider.empty() ? 9 - static_cast(humanized.size()) : 0); const string graphics = (use_graphs ? mem_graphs.at(name)(mem.percent.at(name), redraw or data_same) : mem_meters.at(name)(mem.percent.at(name).back())); if (mem_size > 2) { out += Mv::to(y+1+cy, x+1+cx) + divider + title.substr(0, big_mem ? 10 : 5) + ":" @@ -928,7 +928,7 @@ namespace Mem { + trans(total) + Fx::ub; if (big_disk) { const string used_percent = to_string(disk.used_percent); - out += Mv::to(y+1+cy, x+1+cx + round((double)disks_width / 2) - round((double)used_percent.size() / 2) - 1) + hu_div + used_percent + '%' + hu_div; + out += Mv::to(y + 1 + cy, x + 1 + cx + round(disks_width / 2.0) - round(used_percent.size() / 2.0) - 1) + hu_div + used_percent + '%' + hu_div; } out += Mv::to(y+2+cy++, x+1+cx) + (big_disk ? " IO% " : " IO " + Mv::l(2)) + Theme::c("inactive_fg") + graph_bg * (disks_width - 6) + Mv::l(disks_width - 6) + io_graphs.at(mount + "_activity")(disk.io_activity, redraw or data_same) + Theme::c("main_fg"); @@ -968,7 +968,7 @@ namespace Mem { out += Mv::to(y+1+cy, x+1+cx) + divider + Theme::c("title") + Fx::b + uresize(disk.name, disks_width - 8) + Mv::to(y+1+cy, x+cx + disks_width - human_total.size()) + trans(human_total) + Fx::ub + Theme::c("main_fg"); if (big_disk and not human_io.empty()) - out += Mv::to(y+1+cy, x+1+cx + round((double)disks_width / 2) - round((double)human_io.size() / 2) - 1) + hu_div + human_io + hu_div; + out += Mv::to(y + 1 + cy, x + 1 + cx + round(disks_width / 2.0) - round(human_io.size() / 2.0) - 1) + hu_div + human_io + hu_div; if (++cy > height - 3) break; if (show_io_stat and io_graphs.contains(mount + "_activity")) { out += Mv::to(y+1+cy, x+1+cx) + (big_disk ? " IO% " : " IO " + Mv::l(2)) + Theme::c("inactive_fg") + graph_bg * (disks_width - 6) + Theme::g("available").at(clamp(disk.io_activity.back(), 50ll, 100ll)) @@ -1025,9 +1025,9 @@ namespace Net { out.reserve(width * height); const string title_left = Theme::c("net_box") + Fx::ub + Symbols::title_left; const string title_right = Theme::c("net_box") + Fx::ub + Symbols::title_right; - const int i_size = min((int)selected_iface.size(), 10); - const long long down_max = (net_auto ? graph_max.at("download") : ((long long)(Config::getI("net_download")) << 20) / 8); - const long long up_max = (net_auto ? graph_max.at("upload") : ((long long)(Config::getI("net_upload")) << 20) / 8); + const int i_size = min(static_cast(selected_iface.size()), 10); + const long long down_max = (net_auto ? graph_max.at("download") : (static_cast(Config::getI("net_download")) << 20) / 8); + const long long up_max = (net_auto ? graph_max.at("upload") : (static_cast(Config::getI("net_upload")) << 20) / 8); //* Redraw elements not needed to be updated every cycle if (redraw) { @@ -1163,7 +1163,7 @@ namespace Proc { } else if (cmd_key.starts_with("mousey")) { int mouse_y = std::stoi(cmd_key.substr(6)); - start = clamp((int)round((double)mouse_y * (numpids - select_max - 2) / (select_max - 2)), 0, max(0, numpids - select_max)); + start = clamp(static_cast(round(mouse_y * (numpids - select_max - 2) / (select_max - 2.0))), 0, max(0, numpids - select_max)); } bool changed = false; @@ -1269,8 +1269,8 @@ namespace Proc { if (selected == 0) Input::mouse_mappings["enter"] = {d_y, d_x + d_width - 9, 1, 6}; //? Labels - const int item_fit = floor((double)(d_width - 2) / 10); - const int item_width = floor((double)(d_width - 2) / min(item_fit, 8)); + const int item_fit = floor((d_width - 2) / 10.0); + const int item_width = floor((d_width - 2.0) / min(item_fit, 8)); out += Mv::to(d_y + 1, d_x + 1) + Fx::b + Theme::c("title") + cjust("Status:", item_width) + cjust("Elapsed:", item_width); @@ -1288,7 +1288,7 @@ namespace Proc { out += Theme::c("main_fg") + Fx::ub; const int cmd_size = ulen(detailed.entry.cmd, true); - for (int num_lines = min(3, (int)ceil((double)cmd_size / (d_width - 5))), i = 0; i < num_lines; i++) { + for (int num_lines = min(3, static_cast(ceil(cmd_size / (d_width - 5.0)))), i = 0; i < num_lines; i++) { out += Mv::to(d_y + 5 + (num_lines == 1 ? 1 : i), d_x + 3) + cjust(luresize(detailed.entry.cmd, cmd_size - (d_width - 5) * i, true), d_width - 5, true, true); } @@ -1378,8 +1378,8 @@ namespace Proc { //? Draw details box if shown if (show_detailed) { bool alive = detailed.status != "Dead"; - const int item_fit = floor((double)(d_width - 2) / 10); - const int item_width = floor((double)(d_width - 2) / min(item_fit, 8)); + const int item_fit = floor((d_width - 2) / 10.0); + const int item_width = floor((d_width - 2.0) / min(item_fit, 8)); //? Graph part of box string cpu_str = (alive ? to_string(detailed.entry.cpu_p) : ""); @@ -1405,7 +1405,7 @@ namespace Proc { if (item_fit >= 8) out += cjust(to_string(detailed.entry.p_nice), item_width); - const double mem_p = (double)detailed.mem_bytes.back() * 100 / totalMem; + const double mem_p = detailed.mem_bytes.back() * 100.0 / totalMem; string mem_str = to_string(mem_p); mem_str.resize((mem_p < 10 or mem_p >= 100 ? 3 : 4)); out += Mv::to(d_y + 4, d_x + 1) + Theme::c("title") + Fx::b + rjust((item_fit > 4 ? "Memory: " : "M:") + mem_str + "% ", (d_width / 3) - 2) @@ -1430,7 +1430,7 @@ namespace Proc { if (p.filtered or (proc_tree and p.tree_index == plist.size()) or n++ < start) continue; bool is_selected = (lc + 1 == selected); if (is_selected) { - selected_pid = (int)p.pid; + selected_pid = p.pid; selected_name = p.name; selected_depth = p.depth; } @@ -1464,7 +1464,7 @@ namespace Proc { if (proc_colors) { end = Theme::c("main_fg") + Fx::ub; array colors; - for (int i = 0; int v : {(int)round(p.cpu_p), (int)round(p.mem * 100 / totalMem), (int)p.threads / 3}) { + for (int i = 0; int v : {static_cast(round(p.cpu_p)), static_cast(round(p.mem * 100.0 / totalMem)), static_cast(p.threads / 3)}) { if (proc_gradient) { int val = (min(v, 100) + 100) - calc * 100 / select_max; if (val < 100) colors[i++] = Theme::g("proc_color").at(max(0, val)); @@ -1523,17 +1523,17 @@ namespace Proc { } string mem_str = (mem_bytes ? floating_humanizer(p.mem, true) : ""); if (not mem_bytes) { - double mem_p = clamp((double)p.mem * 100 / totalMem, 0.0, 100.0); + double mem_p = clamp(p.mem * 100.0 / totalMem, 0.0, 100.0); mem_str = to_string(mem_p); if (mem_str.size() < 4) mem_str = "0"; else mem_str.resize((mem_p < 10 or mem_p >= 100 ? 3 : 4)); mem_str += '%'; } - out += (thread_size > 0 ? t_color + rjust(to_string(min(p.threads, (size_t)9999)), thread_size) + ' ' + end : "" ) + out += (thread_size > 0 ? t_color + rjust(to_string(min(p.threads, static_cast(9999))), thread_size) + ' ' + end : "" ) + g_color + ljust((cmp_greater(p.user.size(), user_size) ? p.user.substr(0, user_size - 1) + '+' : p.user), user_size) + ' ' + m_color + rjust(mem_str, 5) + end + ' ' + (is_selected ? "" : Theme::c("inactive_fg")) + (show_graphs ? graph_bg * 5: "") - + (p_graphs.contains(p.pid) ? Mv::l(5) + c_color + p_graphs.at(p.pid)({(p.cpu_p >= 0.1 and p.cpu_p < 5 ? 5ll : (long long)round(p.cpu_p))}, data_same) : "") + end + ' ' + + (p_graphs.contains(p.pid) ? Mv::l(5) + c_color + p_graphs.at(p.pid)({(p.cpu_p >= 0.1 and p.cpu_p < 5 ? 5ll : llround(p.cpu_p))}, data_same) : "") + end + ' ' + c_color + rjust(cpu_str, 4) + " " + end; if (lc++ > height - 5) break; } @@ -1543,7 +1543,7 @@ namespace Proc { //? Draw scrollbar if needed if (numpids > select_max) { - const int scroll_pos = clamp((int)round((double)start * select_max / (numpids - select_max)), 0, height - 5); + const int scroll_pos = clamp(static_cast(round(static_cast(start) * select_max / (numpids - select_max))), 0, height - 5); out += Mv::to(y + 1, x + width - 2) + Fx::b + Theme::c("main_fg") + Symbols::up + Mv::to(y + height - 2, x + width - 2) + Symbols::down + Mv::to(y + 2 + scroll_pos, x + width - 2) + "█"; @@ -1551,8 +1551,8 @@ namespace Proc { //? Current selection and number of processes string location = to_string(start + selected) + '/' + to_string(numpids); - string loc_clear = Symbols::h_line * max((size_t)0, 9 - location.size()); - out += Mv::to(y + height - 1, x+width - 3 - max(9, (int)location.size())) + Fx::ub + Theme::c("proc_box") + loc_clear + string loc_clear = Symbols::h_line * max(static_cast(0), 9 - location.size()); + out += Mv::to(y + height - 1, x+width - 3 - max(9, static_cast(location.size()))) + Fx::ub + Theme::c("proc_box") + loc_clear + Symbols::title_left_down + Theme::c("title") + Fx::b + location + Fx::ub + Theme::c("proc_box") + Symbols::title_right_down; //? Clear out left over graphs from dead processes at a regular interval @@ -1627,12 +1627,12 @@ namespace Draw { if (Cpu::shown) { using namespace Cpu; bool show_temp = (Config::getB("check_temp") and got_sensors); - width = round((double)Term::width * width_p / 100); - height = max(8, (int)ceil((double)Term::height * (trim(boxes) == "cpu" ? 100 : height_p) / 100)); + width = round(Term::width * width_p / 100.0); + height = max(8, static_cast(ceil(Term::height * (trim(boxes) == "cpu" ? 100 : height_p) / 100.0))); x = 1; y = cpu_bottom ? Term::height - height + 1 : 1; - b_columns = max(1, (int)ceil((double)(Shared::coreCount + 1) / (height - 5))); + b_columns = max(1, static_cast(ceil((Shared::coreCount + 1) / (height - 5.0)))); if (b_columns * (21 + 12 * show_temp) < width - (width / 3)) { b_column_size = 2; b_width = (21 + 12 * show_temp) * b_columns - (b_columns - 1); @@ -1650,10 +1650,10 @@ namespace Draw { } if (b_column_size == 0) b_width = (8 + 6 * show_temp) * b_columns + 1; - b_height = min(height - 2, (int)ceil((double)Shared::coreCount / b_columns) + 4); + b_height = min(height - 2, static_cast(ceil(static_cast(Shared::coreCount) / b_columns)) + 4); b_x = x + width - b_width - 1; - b_y = y + ceil((double)(height - 2) / 2) - ceil((double)b_height / 2) + 1; + b_y = y + ceil((height - 2) / 2.0) - ceil(b_height / 2.0) + 1; box = createBox(x, y, width, height, Theme::c("cpu_box"), true, (cpu_bottom ? "" : "cpu"), (cpu_bottom ? "cpu" : ""), 1); @@ -1669,8 +1669,8 @@ namespace Draw { auto swap_disk = Config::getB("swap_disk"); auto mem_graphs = Config::getB("mem_graphs"); - width = round((double)Term::width * (Proc::shown ? width_p : 100) / 100); - height = ceil((double)Term::height * (100 - Cpu::height_p * Cpu::shown - Net::height_p * Net::shown) / 100) + 1; + width = round(Term::width * (Proc::shown ? width_p : 100) / 100.0); + height = ceil(Term::height * (100 - Cpu::height_p * Cpu::shown - Net::height_p * Net::shown) / 100.0) + 1; if (height + Cpu::height > Term::height) height = Term::height - Cpu::height; x = (proc_left and Proc::shown) ? Term::width - width + 1: 1; if (mem_below_net and Net::shown) @@ -1679,7 +1679,7 @@ namespace Draw { y = cpu_bottom ? 1 : Cpu::height + 1; if (show_disks) { - mem_width = ceil((double)(width - 3) / 2); + mem_width = ceil((width - 3) / 2.0); mem_width += mem_width % 2; disks_width = width - mem_width - 2; divider = x + mem_width; @@ -1699,7 +1699,7 @@ namespace Draw { if (mem_size == 1) mem_meter += 6; if (mem_graphs) { - graph_height = max(1, (int)round((double)((height - (has_swap and not swap_disk ? 2 : 1)) - (mem_size == 3 ? 2 : 1) * item_height) / item_height)); + graph_height = max(1, static_cast(round((height - (has_swap and not swap_disk ? 2 : 1)) - (mem_size == 3 ? 2 : 1) * item_height / static_cast(item_height)))); if (graph_height > 1) mem_meter += 6; } else @@ -1724,7 +1724,7 @@ namespace Draw { //* Calculate and draw net box outlines if (Net::shown) { using namespace Net; - width = round((double)Term::width * (Proc::shown ? width_p : 100) / 100); + width = round(Term::width * (Proc::shown ? width_p : 100) / 100.0); height = Term::height - Cpu::height - Mem::height; x = (proc_left and Proc::shown) ? Term::width - width + 1 : 1; if (mem_below_net and Mem::shown) @@ -1736,7 +1736,7 @@ namespace Draw { b_height = (height > 10) ? 9 : height - 2; b_x = x + width - b_width - 1; b_y = y + ((height - 2) / 2) - b_height / 2 + 1; - d_graph_height = round((double)(height - 2) / 2); + d_graph_height = round((height - 2) / 2.0); u_graph_height = height - 2 - d_graph_height; box = createBox(x, y, width, height, Theme::c("net_box"), true, "net", "", 3); diff --git a/src/btop_input.cpp b/src/btop_input.cpp index ebdee3b..93b91e9 100644 --- a/src/btop_input.cpp +++ b/src/btop_input.cpp @@ -16,19 +16,21 @@ indent = tab tab-size = 4 */ +#include +#include #include -#include -#include -#include #include -#include +#include +#include +#include +#include -#include "btop_input.hpp" -#include "btop_tools.hpp" #include "btop_config.hpp" -#include "btop_shared.hpp" -#include "btop_menu.hpp" #include "btop_draw.hpp" +#include "btop_input.hpp" +#include "btop_menu.hpp" +#include "btop_shared.hpp" +#include "btop_tools.hpp" using std::cin; @@ -190,8 +192,10 @@ namespace Input { if (not key.empty()) { try { const auto delim = key_view.find(';'); - mouse_pos[0] = stoi((string)key_view.substr(0, delim)); - mouse_pos[1] = stoi((string)key_view.substr(delim + 1, key_view.find('M', delim))); + auto result = std::from_chars(key_view.data(), key_view.data() + delim, mouse_pos[0]); + if (result.ec == std::errc::invalid_argument) { throw std::invalid_argument(""); } + result = std::from_chars(key_view.data() + delim + 1, key_view.data() + key_view.find('M', delim + 1), mouse_pos[1]); + if (result.ec == std::errc::invalid_argument) { throw std::invalid_argument(""); } } catch (const std::invalid_argument&) { mouse_event.clear(); } catch (const std::out_of_range&) { mouse_event.clear(); } @@ -271,7 +275,7 @@ namespace Input { } else if (is_in(key, "p", "P") and Config::preset_list.size() > 1) { if (key == "p") { - if (++Config::current_preset >= (int)Config::preset_list.size()) Config::current_preset = 0; + if (++Config::current_preset >= static_cast(Config::preset_list.size())) Config::current_preset = 0; } else { if (--Config::current_preset < 0) Config::current_preset = Config::preset_list.size() - 1; @@ -507,12 +511,12 @@ namespace Input { if (is_in(key, "b", "n")) { atomic_wait(Runner::active); int c_index = v_index(Net::interfaces, Net::selected_iface); - if (c_index != (int)Net::interfaces.size()) { + if (c_index != static_cast(Net::interfaces.size())) { if (key == "b") { if (--c_index < 0) c_index = Net::interfaces.size() - 1; } else if (key == "n") { - if (++c_index == (int)Net::interfaces.size()) c_index = 0; + if (++c_index == static_cast(Net::interfaces.size())) c_index = 0; } Net::selected_iface = Net::interfaces.at(c_index); Net::rescale = true; diff --git a/src/btop_menu.cpp b/src/btop_menu.cpp index c9dfbdc..3ff8f3c 100644 --- a/src/btop_menu.cpp +++ b/src/btop_menu.cpp @@ -645,7 +645,7 @@ namespace Menu { box_contents = Draw::createBox(x, y, width, height, Theme::c("hi_fg"), true, title) + Mv::d(1); for (const auto& line : content) { - box_contents += Mv::save + Mv::r(max((size_t)0, (width / 2) - (Fx::uncolor(line).size() / 2) - 1)) + line + Mv::restore + Mv::d(1); + box_contents += Mv::save + Mv::r(max(static_cast(0), (width / 2) - (Fx::uncolor(line).size() / 2) - 1)) + line + Mv::restore + Mv::d(1); } } @@ -1034,7 +1034,7 @@ namespace Menu { auto vim_keys = Config::getB("vim_keys"); if (max_items == 0) { for (const auto& cat : categories) { - if ((int)cat.size() > max_items) max_items = cat.size(); + if (static_cast(cat.size()) > max_items) max_items = cat.size(); } } if (bg.empty()) { @@ -1112,7 +1112,7 @@ namespace Menu { return Closed; } else if (mouse_x < x + 30 and mouse_y > y + 8) { - auto m_select = ceil((double)(mouse_y - y - 8) / 2) - 1; + auto m_select = ceil((mouse_y - y - 8) / 2.0) - 1; if (selected != m_select) selected = m_select; else if (selPred.test(isEditable)) @@ -1154,11 +1154,11 @@ namespace Menu { selected = 0; } else if (key == "tab") { - if (++selected_cat >= (int)categories.size()) selected_cat = 0; + if (++selected_cat >= static_cast(categories.size())) selected_cat = 0; page = selected = 0; } else if (key == "shift_tab") { - if (--selected_cat < 0) selected_cat = (int)categories.size() - 1; + if (--selected_cat < 0) selected_cat = static_cast(categories.size()) - 1; page = selected = 0; } else if (is_in(key, "1", "2", "3", "4", "5") or key.starts_with("select_cat_")) { @@ -1203,7 +1203,7 @@ namespace Menu { auto& optList = optionsList.at(option).get(); int i = v_index(optList, Config::getS(option)); - if ((key == "right" or (vim_keys and key == "l")) and ++i >= (int)optList.size()) i = 0; + if ((key == "right" or (vim_keys and key == "l")) and ++i >= static_cast(optList.size())) i = 0; else if ((key == "left" or (vim_keys and key == "h")) and --i < 0) i = optList.size() - 1; Config::set(option, optList.at(i)); @@ -1228,10 +1228,10 @@ namespace Menu { Config::unlock(); auto& out = Global::overlay; out = bg; - item_height = min((int)categories[selected_cat].size(), (int)floor((double)(height - 4) / 2)); - pages = ceil((double)categories[selected_cat].size() / item_height); + item_height = min(static_cast(categories[selected_cat].size()), (height - 4) / 2); + pages = ceil(static_cast(categories[selected_cat].size()) / item_height); if (page > pages - 1) page = pages - 1; - select_max = min(item_height - 1, (int)categories[selected_cat].size() - 1 - item_height * page); + select_max = min(item_height - 1, static_cast(categories[selected_cat].size()) - 1 - item_height * page); if (selected > select_max) { selected = select_max; } @@ -1274,9 +1274,9 @@ namespace Menu { } //? Option name and value auto cy = y+9; - for (int c = 0, i = max(0, item_height * page); c++ < item_height and i < (int)categories[selected_cat].size(); i++) { + for (int c = 0, i = max(0, item_height * page); c++ < item_height and i < static_cast(categories[selected_cat].size()); i++) { const auto& option = categories[selected_cat][i][0]; - const auto& value = (option == "color_theme" ? (string) fs::path(Config::getS("color_theme")).stem() : Config::getAsString(option)); + const auto& value = (option == "color_theme" ? fs::path(Config::getS("color_theme")).stem().string() : Config::getAsString(option)); out += Mv::to(cy++, x + 1) + (c-1 == selected ? Theme::c("selected_bg") + Theme::c("selected_fg") : Theme::c("title")) + Fx::b + cjust(capitalize(s_replace(option, "_", " ")) @@ -1307,7 +1307,7 @@ namespace Menu { } if (not warnings.empty()) { - messageBox = msgBox{min(78, (int)ulen(warnings) + 10), msgBox::BoxTypes::OK, {uresize(warnings, 74)}, "warning"}; + messageBox = msgBox{min(78, static_cast(ulen(warnings)) + 10), msgBox::BoxTypes::OK, {uresize(warnings, 74)}, "warning"}; out += messageBox(); } @@ -1348,10 +1348,10 @@ namespace Menu { int retval = Changed; if (redraw) { - y = max(1, Term::height/2 - 4 - (int)(help_text.size() / 2)); - x = Term::width/2 - 39; - height = min(Term::height - 6, (int)help_text.size() + 3); - pages = ceil((double)help_text.size() / (height - 3)); + y = max(1, Term::height / 2 - 4 - static_cast(help_text.size()) / 2); + x = Term::width / 2 - 39; + height = min(Term::height - 6, static_cast(help_text.size()) + 3); + pages = ceil(help_text.size() / (height - 3.0)); page = 0; bg = Draw::banner_gen(y, 0, true); bg += Draw::createBox(x, y + 6, 78, height, Theme::c("hi_fg"), true, "help"); @@ -1379,7 +1379,7 @@ namespace Menu { } auto cy = y+7; out += Mv::to(cy++, x + 1) + Theme::c("title") + Fx::b + cjust("Key:", 20) + "Description:"; - for (int c = 0, i = max(0, (height - 3) * page); c++ < height - 3 and i < (int)help_text.size(); i++) { + for (int c = 0, i = max(0, (height - 3) * page); c++ < height - 3 and i < static_cast(help_text.size()); i++) { out += Mv::to(cy++, x + 1) + Theme::c("hi_fg") + Fx::b + cjust(help_text[i][0], 20) + Theme::c("main_fg") + Fx::ub + help_text[i][1]; } @@ -1426,7 +1426,7 @@ namespace Menu { menuMask.set(SizeError); } - for (const auto& i : iota(0, (int)menuMask.size())) { + for (const auto& i : iota(0, static_cast(menuMask.size()))) { if (menuMask.test(i)) currentMenu = i; } diff --git a/src/btop_shared.cpp b/src/btop_shared.cpp index e5c9027..3cc393f 100644 --- a/src/btop_shared.cpp +++ b/src/btop_shared.cpp @@ -93,7 +93,7 @@ namespace Proc { for (auto& r : proc_vec) { r.entry.get().tree_index = (collapsed or r.entry.get().filtered ? index_max : c_index++); if (not r.children.empty()) { - tree_sort(r.children, sorting, reverse, c_index, (collapsed or r.entry.get().collapsed or r.entry.get().tree_index == (size_t)index_max)); + tree_sort(r.children, sorting, reverse, c_index, (collapsed or r.entry.get().collapsed or r.entry.get().tree_index == static_cast(index_max))); } } } @@ -130,7 +130,7 @@ namespace Proc { //? Try to find name of the binary file and append to program name if not the same if (cur_proc.short_cmd.empty() and not cur_proc.cmd.empty()) { std::string_view cmd_view = cur_proc.cmd; - cmd_view = cmd_view.substr((size_t)0, std::min(cmd_view.find(' '), cmd_view.size())); + cmd_view = cmd_view.substr(0, std::min(cmd_view.find(' '), cmd_view.size())); cmd_view = cmd_view.substr(std::min(cmd_view.find_last_of('/') + 1, cmd_view.size())); cur_proc.short_cmd = string{cmd_view}; } diff --git a/src/btop_theme.cpp b/src/btop_theme.cpp index 8a641fe..ab0cd93 100644 --- a/src/btop_theme.cpp +++ b/src/btop_theme.cpp @@ -140,12 +140,12 @@ namespace Theme { //* Convert 24-bit colors to 256 colors int truecolor_to_256(const int& r, const int& g, const int& b) { //? Use upper 232-255 greyscale values if the downscaled red, green and blue are the same value - if (const int red = round((double)r / 11); red == round((double)g / 11) and red == round((double)b / 11)) { - return 232 + red; + if (r == g && g == b) { + return 232 + round(r / 11.0); } //? Else use 6x6x6 color cube to calculate approximate colors else { - return round((double)r / 51) * 36 + round((double)g / 51) * 6 + round((double)b / 51) + 16; + return lround(r / 51.0) * 36 + lround(g / 51.0) * 6 + lround(b / 51.0) + 16; } } } diff --git a/src/btop_tools.cpp b/src/btop_tools.cpp index f6be174..9254431 100644 --- a/src/btop_tools.cpp +++ b/src/btop_tools.cpp @@ -118,7 +118,7 @@ namespace Term { bool init() { if (not initialized) { - initialized = (bool)isatty(STDIN_FILENO); + initialized = isatty(STDIN_FILENO) == 1; if (initialized) { tcgetattr(STDIN_FILENO, &initial_settings); current_tty = (ttyname(STDIN_FILENO) != nullptr ? static_cast(ttyname(STDIN_FILENO)) : "unknown"); @@ -243,7 +243,7 @@ namespace Tools { for (size_t x = 0, last_pos = 0, i = str.size() - 1; i > 0 ; i--) { if (wide and static_cast(str.at(i)) > 0xef) { x += 2; - last_pos = max((size_t)0, i - 1); + last_pos = max(static_cast(0), i - 1); } else if ((static_cast(str.at(i)) & 0xC0) != 0x80) { x++; @@ -298,14 +298,14 @@ namespace Tools { if (limit and ulen(str, wide) > x) return uresize(str, x, wide); - return str + string(max((int)(x - ulen(str)), 0), ' '); + return str + string(max(static_cast(x - ulen(str)), 0), ' '); } else { if (limit and str.size() > x) { str.resize(x); return str; } - return str + string(max((int)(x - str.size()), 0), ' '); + return str + string(max(static_cast(x - str.size()), 0), ' '); } } @@ -314,14 +314,14 @@ namespace Tools { if (limit and ulen(str, wide) > x) return uresize(str, x, wide); - return string(max((int)(x - ulen(str)), 0), ' ') + str; + return string(max(static_cast(x - ulen(str)), 0), ' ') + str; } else { if (limit and str.size() > x) { str.resize(x); return str; }; - return string(max((int)(x - str.size()), 0), ' ') + str; + return string(max(static_cast(x - str.size()), 0), ' ') + str; } } @@ -330,14 +330,14 @@ namespace Tools { if (limit and ulen(str, wide) > x) return uresize(str, x, wide); - return string(max((int)ceil((double)(x - ulen(str)) / 2), 0), ' ') + str + string(max((int)floor((double)(x - ulen(str)) / 2), 0), ' '); + return string(max(static_cast(ceil(static_cast(x - ulen(str)) / 2)), 0), ' ') + str + string(max(static_cast(floor((x - ulen(str)) / 2)), 0), ' '); } else { if (limit and str.size() > x) { str.resize(x); return str; } - return string(max((int)ceil((double)(x - str.size()) / 2), 0), ' ') + str + string(max((int)floor((double)(x - str.size()) / 2), 0), ' '); + return string(max(static_cast(ceil((x - str.size()) / 2.0)), 0), ' ') + str + string(max(static_cast(floor((x - str.size()) / 2.0)), 0), ' '); } } @@ -440,10 +440,10 @@ namespace Tools { out = to_string(round(stod(out) * 10) / 10).substr(0,3); } else if (f_pos != string::npos) { - out = to_string((int)round(stod(out))); + out = to_string(round(stod(out))); } if (out.size() > 3) { - out = to_string((int)(out[0] - '0')) + ".0"; + out = to_string((out[0] - '0')) + ".0"; start++; } out.push_back(units[start][0]); @@ -515,11 +515,11 @@ namespace Tools { if (scale == "celsius") return {celsius, "°C"}; else if (scale == "fahrenheit") - return {(long long)round((double)celsius * 1.8 + 32), "°F"}; + return {round(celsius * 1.8 + 32), "°F"}; else if (scale == "kelvin") - return {(long long)round((double)celsius + 273.15), "K "}; + return {round(celsius + 273.15), "K "}; else if (scale == "rankine") - return {(long long)round((double)celsius * 1.8 + 491.67), "°R"}; + return {round(celsius * 1.8 + 491.67), "°R"}; return {0, ""}; } diff --git a/src/freebsd/btop_collect.cpp b/src/freebsd/btop_collect.cpp index 47598f0..a1546df 100644 --- a/src/freebsd/btop_collect.cpp +++ b/src/freebsd/btop_collect.cpp @@ -333,7 +333,7 @@ namespace Cpu { //? If core mapping from cpuinfo was incomplete try to guess remainder, if missing completely, map 0-0 1-1 2-2 etc. if (cmp_less(core_map.size(), Shared::coreCount)) { - if (Shared::coreCount % 2 == 0 and (long) core_map.size() == Shared::coreCount / 2) { + if (Shared::coreCount % 2 == 0 and static_cast(core_map.size()) == Shared::coreCount / 2) { for (int i = 0, n = 0; i < Shared::coreCount / 2; i++) { if (std::cmp_greater_equal(n, core_sensors.size())) n = 0; core_map[Shared::coreCount / 2 + i] = n++; @@ -441,14 +441,14 @@ namespace Cpu { core_old_totals.at(i) = totals; core_old_idles.at(i) = idles; - cpu.core_percent.at(i).push_back(clamp((long long)round((double)(calc_totals - calc_idles) * 100 / calc_totals), 0ll, 100ll)); + cpu.core_percent.at(i).push_back(clamp(llround((calc_totals - calc_idles) * 100.0 / calc_totals), 0ll, 100ll)); //? Reduce size if there are more values than needed for graph if (cpu.core_percent.at(i).size() > 40) cpu.core_percent.at(i).pop_front(); } catch (const std::exception &e) { - Logger::error("Cpu::collect() : " + (string)e.what()); - throw std::runtime_error("collect() : " + (string)e.what()); + Logger::error("Cpu::collect() : " + string{e.what()}); + throw std::runtime_error("collect() : " + string{e.what()}); } } @@ -458,7 +458,7 @@ namespace Cpu { //? Populate cpu.cpu_percent with all fields from syscall for (int ii = 0; const auto &val : times_summed) { - cpu.cpu_percent.at(time_names.at(ii)).push_back(clamp((long long)round((double)(val - cpu_old.at(time_names.at(ii))) * 100 / calc_totals), 0ll, 100ll)); + cpu.cpu_percent.at(time_names.at(ii)).push_back(clamp(llround((val - cpu_old.at(time_names.at(ii))) * 100.0 / calc_totals), 0ll, 100ll)); cpu_old.at(time_names.at(ii)) = val; //? Reduce size if there are more values than needed for graph @@ -471,7 +471,7 @@ namespace Cpu { cpu_old.at("idles") = global_idles; //? Total usage of cpu - cpu.cpu_percent.at("total").push_back(clamp((long long)round((double)(calc_totals - calc_idles) * 100 / calc_totals), 0ll, 100ll)); + cpu.cpu_percent.at("total").push_back(clamp(llround((calc_totals - calc_idles) * 100.0 / calc_totals), 0ll, 100ll)); //? Reduce size if there are more values than needed for graph while (cmp_greater(cpu.cpu_percent.at("total").size(), width * 2)) cpu.cpu_percent.at("total").pop_front(); @@ -511,7 +511,7 @@ namespace Mem { if (disk.io_read.empty()) { disk.io_read.push_back(0); } else { - disk.io_read.push_back(max((int64_t)0, (readBytes - disk.old_io.at(0)))); + disk.io_read.push_back(max(static_cast(0), (readBytes - disk.old_io.at(0)))); } disk.old_io.at(0) = readBytes; while (cmp_greater(disk.io_read.size(), width * 2)) disk.io_read.pop_front(); @@ -519,7 +519,7 @@ namespace Mem { if (disk.io_write.empty()) { disk.io_write.push_back(0); } else { - disk.io_write.push_back(max((int64_t)0, (writeBytes - disk.old_io.at(1)))); + disk.io_write.push_back(max(static_cast(0), (writeBytes - disk.old_io.at(1)))); } disk.old_io.at(1) = writeBytes; while (cmp_greater(disk.io_write.size(), width * 2)) disk.io_write.pop_front(); @@ -528,7 +528,7 @@ namespace Mem { if (disk.io_activity.empty()) disk.io_activity.push_back(0); else - disk.io_activity.push_back(clamp((long)round((double)(disk.io_write.back() + disk.io_read.back()) / (1 << 20)), 0l, 100l)); + disk.io_activity.push_back(clamp(lround(static_cast(disk.io_write.back() + disk.io_read.back()) / (1 << 20)), 0l, 100l)); while (cmp_greater(disk.io_activity.size(), width * 2)) disk.io_activity.pop_front(); } @@ -676,7 +676,7 @@ namespace Mem { if (show_swap and mem.stats.at("swap_total") > 0) { for (const auto &name : swap_names) { - mem.percent.at(name).push_back(round((double)mem.stats.at(name) * 100 / mem.stats.at("swap_total"))); + mem.percent.at(name).push_back(round(mem.stats.at(name) * 100.0 / mem.stats.at("swap_total"))); while (cmp_greater(mem.percent.at(name).size(), width * 2)) mem.percent.at(name).pop_front(); } @@ -685,7 +685,7 @@ namespace Mem { has_swap = false; //? Calculate percentages for (const auto &name : mem_names) { - mem.percent.at(name).push_back(round((double)mem.stats.at(name) * 100 / Shared::totalMem)); + mem.percent.at(name).push_back(round(mem.stats.at(name) * 100.0 / Shared::totalMem)); while (cmp_greater(mem.percent.at(name).size(), width * 2)) mem.percent.at(name).pop_front(); } @@ -772,7 +772,7 @@ namespace Mem { disk.total = vfs.f_blocks * vfs.f_frsize; disk.free = vfs.f_bfree * vfs.f_frsize; disk.used = disk.total - disk.free; - disk.used_percent = round((double)disk.used * 100 / disk.total); + disk.used_percent = round(disk.used * 100.0 / disk.total); disk.free_percent = 100 - disk.used_percent; } @@ -905,11 +905,11 @@ namespace Net { char *lim = buf.get() + len; char *next = nullptr; for (next = buf.get(); next < lim;) { - struct if_msghdr *ifm = (struct if_msghdr *)next; + struct if_msghdr *ifm = reinterpret_cast(next); next += ifm->ifm_msglen; struct if_data ifm_data = ifm->ifm_data; if (ifm->ifm_addrs & RTA_IFP) { - struct sockaddr_dl *sdl = (struct sockaddr_dl *)(ifm + 1); + struct sockaddr_dl *sdl = reinterpret_cast(ifm + 1); char iface[32]; strncpy(iface, sdl->sdl_data, sdl->sdl_nlen); iface[sdl->sdl_nlen] = 0; @@ -931,11 +931,11 @@ namespace Net { saved_stat.rollover += saved_stat.last; saved_stat.last = 0; } - if (cmp_greater((unsigned long long)saved_stat.rollover + (unsigned long long)val, numeric_limits::max())) { + if (cmp_greater(static_cast(saved_stat.rollover) + static_cast(val), numeric_limits::max())) { saved_stat.rollover = 0; saved_stat.last = 0; } - saved_stat.speed = round((double)(val - saved_stat.last) / ((double)(new_timestamp - timestamp) / 1000)); + saved_stat.speed = round(static_cast(val - saved_stat.last) / (new_timestamp - timestamp) / 1000); if (saved_stat.speed > saved_stat.top) saved_stat.top = saved_stat.speed; if (saved_stat.offset > val + saved_stat.rollover) saved_stat.offset = 0; saved_stat.total = (val + saved_stat.rollover) - saved_stat.offset; @@ -1012,7 +1012,7 @@ namespace Net { const long long avg_speed = (net[selected_iface].bandwidth[dir].size() > 5 ? std::accumulate(net.at(selected_iface).bandwidth.at(dir).rbegin(), net.at(selected_iface).bandwidth.at(dir).rbegin() + 5, 0ll) / 5 : net[selected_iface].stat[dir].speed); - graph_max[dir] = max(uint64_t(avg_speed * (sel == 0 ? 1.3 : 3.0)), (uint64_t)10 << 10); + graph_max[dir] = max(uint64_t(avg_speed * (sel == 0 ? 1.3 : 3.0)), static_cast(10) << 10); max_count[dir][0] = max_count[dir][1] = 0; redraw = true; if (net_sync) sync = true; @@ -1075,7 +1075,7 @@ namespace Proc { //? Update cpu percent deque for process cpu graph if (not Config::getB("proc_per_core")) detailed.entry.cpu_p *= Shared::coreCount; - detailed.cpu_percent.push_back(clamp((long long)round(detailed.entry.cpu_p), 0ll, 100ll)); + detailed.cpu_percent.push_back(clamp(llround(detailed.entry.cpu_p), 0ll, 100ll)); while (cmp_greater(detailed.cpu_percent.size(), width)) detailed.cpu_percent.pop_front(); //? Process runtime : current time - start time (both in unix time - seconds since epoch) @@ -1097,7 +1097,7 @@ namespace Proc { detailed.memory = floating_humanizer(detailed.entry.mem); if (detailed.first_mem == -1 or detailed.first_mem < detailed.mem_bytes.back() / 2 or detailed.first_mem > detailed.mem_bytes.back() * 4) { - detailed.first_mem = min((uint64_t)detailed.mem_bytes.back() * 2, Mem::get_totalMem()); + detailed.first_mem = min(static_cast(detailed.mem_bytes.back()) * 2, Mem::get_totalMem()); redraw = true; } @@ -1164,7 +1164,7 @@ namespace Proc { for (int i = 0; i < count; i++) { const struct kinfo_proc* kproc = &kprocs[i]; - const size_t pid = (size_t)kproc->ki_pid; + const size_t pid = kproc->ki_pid; if (pid < 1) continue; found.push_back(pid); @@ -1219,7 +1219,7 @@ namespace Proc { new_proc.cpu_p = clamp((100.0 * kproc->ki_pctcpu / Shared::kfscale) * cmult, 0.0, 100.0 * Shared::coreCount); //? Process cumulative cpu usage since process start - new_proc.cpu_c = (double)(cpu_t * Shared::clkTck / 1'000'000) / max(1.0, timeNow - new_proc.cpu_s); + new_proc.cpu_c = (cpu_t * Shared::clkTck / 1'000'000.0) / max(1.0, timeNow - new_proc.cpu_s); //? Update cached value with latest cpu times new_proc.cpu_t = cpu_t; @@ -1334,7 +1334,7 @@ namespace Proc { } } - numpids = (int)current_procs.size() - filter_found; + numpids = static_cast(current_procs.size()) - filter_found; return current_procs; } } // namespace Proc diff --git a/src/linux/btop_collect.cpp b/src/linux/btop_collect.cpp index 8a475e2..5e94cd3 100644 --- a/src/linux/btop_collect.cpp +++ b/src/linux/btop_collect.cpp @@ -339,11 +339,11 @@ namespace Cpu { const int64_t temp = stol(readfile(basepath / "temp", "0")) / 1000; int64_t high, crit; - for (int ii = 0; fs::exists(basepath / string("trip_point_" + to_string(ii) + "_temp")); ii++) { - const string trip_type = readfile(basepath / string("trip_point_" + to_string(ii) + "_type")); + for (int ii = 0; fs::exists(basepath / ("trip_point_" + to_string(ii) + "_temp")); ii++) { + const string trip_type = readfile(basepath / ("trip_point_" + to_string(ii) + "_type")); if (not is_in(trip_type, "high", "critical")) continue; auto& val = (trip_type == "high" ? high : crit); - val = stol(readfile(basepath / string("trip_point_" + to_string(ii) + "_temp"), "0")) / 1000; + val = stol(readfile(basepath / ("trip_point_" + to_string(ii) + "_temp"), "0")) / 1000; } if (high < 1) high = 80; if (crit < 1) crit = 95; @@ -444,12 +444,12 @@ namespace Cpu { throw std::runtime_error("Failed to read /sys/devices/system/cpu/cpufreq/policy and /proc/cpuinfo."); if (hz >= 1000) { - if (hz >= 10000) cpuhz = to_string((int)round(hz / 1000)); // Future proof until we reach THz speeds :) + if (hz >= 10000) cpuhz = to_string(round(hz / 1000)); // Future proof until we reach THz speeds :) else cpuhz = to_string(round(hz / 100) / 10.0).substr(0, 3); cpuhz += " GHz"; } else if (hz > 0) - cpuhz = to_string((int)round(hz)) + " MHz"; + cpuhz = to_string(round(hz)) + " MHz"; } catch (const std::exception& e) { @@ -495,7 +495,7 @@ namespace Cpu { //? If core mapping from cpuinfo was incomplete try to guess remainder, if missing completely, map 0-0 1-1 2-2 etc. if (cmp_less(core_map.size(), Shared::coreCount)) { - if (Shared::coreCount % 2 == 0 and (long)core_map.size() == Shared::coreCount / 2) { + if (Shared::coreCount % 2 == 0 and static_cast(core_map.size()) == Shared::coreCount / 2) { for (int i = 0, n = 0; i < Shared::coreCount / 2; i++) { if (std::cmp_greater_equal(n, core_sensors.size())) n = 0; core_map[Shared::coreCount / 2 + i] = n++; @@ -649,7 +649,7 @@ namespace Cpu { if (not is_in(status, "charging", "full")) { if (b.use_energy and not b.power_now.empty()) { try { - seconds = round((double)stoll(readfile(b.energy_now, "0")) / stoll(readfile(b.power_now, "1")) * 3600); + seconds = round(static_cast(stoll(readfile(b.energy_now, "0"))) / stoll(readfile(b.power_now, "1")) * 3600); } catch (const std::invalid_argument&) { } catch (const std::out_of_range&) { } @@ -744,14 +744,14 @@ namespace Cpu { cpu_old.at("idles") = idles; //? Total usage of cpu - cpu.cpu_percent.at("total").push_back(clamp((long long)round((double)(calc_totals - calc_idles) * 100 / calc_totals), 0ll, 100ll)); + cpu.cpu_percent.at("total").push_back(clamp(llround((calc_totals - calc_idles) * 100.0 / calc_totals), 0ll, 100ll)); //? Reduce size if there are more values than needed for graph while (cmp_greater(cpu.cpu_percent.at("total").size(), width * 2)) cpu.cpu_percent.at("total").pop_front(); //? Populate cpu.cpu_percent with all fields from stat for (int ii = 0; const auto& val : times) { - cpu.cpu_percent.at(time_names.at(ii)).push_back(clamp((long long)round((double)(val - cpu_old.at(time_names.at(ii))) * 100 / calc_totals), 0ll, 100ll)); + cpu.cpu_percent.at(time_names.at(ii)).push_back(clamp(llround((val - cpu_old.at(time_names.at(ii))) * 100.0 / calc_totals), 0ll, 100ll)); cpu_old.at(time_names.at(ii)) = val; //? Reduce size if there are more values than needed for graph @@ -774,7 +774,7 @@ namespace Cpu { core_old_totals.at(i-1) = totals; core_old_idles.at(i-1) = idles; - cpu.core_percent.at(i-1).push_back(clamp((long long)round((double)(calc_totals - calc_idles) * 100 / calc_totals), 0ll, 100ll)); + cpu.core_percent.at(i-1).push_back(clamp(llround((calc_totals - calc_idles) * 100.0 / calc_totals), 0ll, 100ll)); } } @@ -913,13 +913,13 @@ namespace Mem { //? Calculate percentages for (const auto& name : mem_names) { - mem.percent.at(name).push_back(round((double)mem.stats.at(name) * 100 / totalMem)); + mem.percent.at(name).push_back(round(mem.stats.at(name) * 100.0 / totalMem)); while (cmp_greater(mem.percent.at(name).size(), width * 2)) mem.percent.at(name).pop_front(); } if (show_swap and mem.stats.at("swap_total") > 0) { for (const auto& name : swap_names) { - mem.percent.at(name).push_back(round((double)mem.stats.at(name) * 100 / mem.stats.at("swap_total"))); + mem.percent.at(name).push_back(round(mem.stats.at(name) * 100.0 / mem.stats.at("swap_total"))); while (cmp_greater(mem.percent.at(name).size(), width * 2)) mem.percent.at(name).pop_front(); } has_swap = true; @@ -1031,12 +1031,13 @@ namespace Mem { if (disks.at(mountpoint).name.empty()) disks.at(mountpoint).name = (mountpoint == "/" ? "root" : mountpoint); string devname = disks.at(mountpoint).dev.filename(); int c = 0; + const std::string_view dev_stat_path {"sys/block/" + devname + "/stat"}; while (devname.size() >= 2) { - if (fs::exists("/sys/block/" + devname + "/stat", ec) and access(string("/sys/block/" + devname + "/stat").c_str(), R_OK) == 0) { + if (fs::exists(dev_stat_path, ec) and access(dev_stat_path.data(), R_OK) == 0) { if (c > 0 and fs::exists("/sys/block/" + devname + '/' + disks.at(mountpoint).dev.filename().string() + "/stat", ec)) disks.at(mountpoint).stat = "/sys/block/" + devname + '/' + disks.at(mountpoint).dev.filename().string() + "/stat"; else - disks.at(mountpoint).stat = "/sys/block/" + devname + "/stat"; + disks.at(mountpoint).stat = dev_stat_path; break; //? Set ZFS stat filepath } else if (fstype == "zfs") { @@ -1091,7 +1092,7 @@ namespace Mem { disk.total = vfs.f_blocks * vfs.f_frsize; disk.free = (free_priv ? vfs.f_bfree : vfs.f_bavail) * vfs.f_frsize; disk.used = disk.total - disk.free; - disk.used_percent = round((double)disk.used * 100 / disk.total); + disk.used_percent = round(disk.used * 100.0 / disk.total); disk.free_percent = 100 - disk.used_percent; } @@ -1154,7 +1155,7 @@ namespace Mem { if (disk.io_write.empty()) disk.io_write.push_back(0); else - disk.io_write.push_back(max((int64_t)0, (sectors_write - disk.old_io.at(1)))); + disk.io_write.push_back(max(static_cast(0), sectors_write - disk.old_io.at(1))); disk.old_io.at(1) = sectors_write; while (cmp_greater(disk.io_write.size(), width * 2)) disk.io_write.pop_front(); @@ -1169,14 +1170,14 @@ namespace Mem { if (disk.io_read.empty()) disk.io_read.push_back(0); else - disk.io_read.push_back(max((int64_t)0, (sectors_read - disk.old_io.at(0)))); + disk.io_read.push_back(max(static_cast(0), sectors_read - disk.old_io.at(0))); disk.old_io.at(0) = sectors_read; while (cmp_greater(disk.io_read.size(), width * 2)) disk.io_read.pop_front(); if (disk.io_activity.empty()) disk.io_activity.push_back(0); else - disk.io_activity.push_back(max((int64_t)0, (io_ticks - disk.old_io.at(2)))); + disk.io_activity.push_back(max(static_cast(0), io_ticks - disk.old_io.at(2))); disk.old_io.at(2) = io_ticks; while (cmp_greater(disk.io_activity.size(), width * 2)) disk.io_activity.pop_front(); } else { @@ -1185,7 +1186,7 @@ namespace Mem { if (disk.io_read.empty()) disk.io_read.push_back(0); else - disk.io_read.push_back(max((int64_t)0, (sectors_read - disk.old_io.at(0)) * 512)); + disk.io_read.push_back(max(static_cast(0), (sectors_read - disk.old_io.at(0)) * 512)); disk.old_io.at(0) = sectors_read; while (cmp_greater(disk.io_read.size(), width * 2)) disk.io_read.pop_front(); @@ -1194,7 +1195,7 @@ namespace Mem { if (disk.io_write.empty()) disk.io_write.push_back(0); else - disk.io_write.push_back(max((int64_t)0, (sectors_write - disk.old_io.at(1)) * 512)); + disk.io_write.push_back(max(static_cast(0), (sectors_write - disk.old_io.at(1)) * 512)); disk.old_io.at(1) = sectors_write; while (cmp_greater(disk.io_write.size(), width * 2)) disk.io_write.pop_front(); @@ -1203,7 +1204,7 @@ namespace Mem { if (disk.io_activity.empty()) disk.io_activity.push_back(0); else - disk.io_activity.push_back(clamp((long)round((double)(io_ticks - disk.old_io.at(2)) / (uptime - old_uptime) / 10), 0l, 100l)); + disk.io_activity.push_back(clamp(llround(static_cast(io_ticks - disk.old_io.at(2)) / (uptime - old_uptime) / 10.0), 0ll, 100ll)); disk.old_io.at(2) = io_ticks; while (cmp_greater(disk.io_activity.size(), width * 2)) disk.io_activity.pop_front(); } @@ -1330,21 +1331,21 @@ namespace Mem { if (disk.io_write.empty()) disk.io_write.push_back(0); else - disk.io_write.push_back(max((int64_t)0, (bytes_write_total - disk.old_io.at(1)))); + disk.io_write.push_back(max(static_cast(0), bytes_write_total - disk.old_io.at(1))); disk.old_io.at(1) = bytes_write_total; while (cmp_greater(disk.io_write.size(), width * 2)) disk.io_write.pop_front(); if (disk.io_read.empty()) disk.io_read.push_back(0); else - disk.io_read.push_back(max((int64_t)0, (bytes_read_total - disk.old_io.at(0)))); + disk.io_read.push_back(max(static_cast(0), bytes_read_total - disk.old_io.at(0))); disk.old_io.at(0) = bytes_read_total; while (cmp_greater(disk.io_read.size(), width * 2)) disk.io_read.pop_front(); if (disk.io_activity.empty()) disk.io_activity.push_back(0); else - disk.io_activity.push_back(max((int64_t)0, (io_ticks_total - disk.old_io.at(2)))); + disk.io_activity.push_back(max(static_cast(0), (io_ticks_total - disk.old_io.at(2)))); disk.old_io.at(2) = io_ticks_total; while (cmp_greater(disk.io_activity.size(), width * 2)) disk.io_activity.pop_front(); @@ -1452,7 +1453,7 @@ namespace Net { auto& bandwidth = net.at(iface).bandwidth.at(dir); uint64_t val{}; // defaults to 0 - try { val = (uint64_t)stoull(readfile(sys_file, "0")); } + try { val = stoull(readfile(sys_file, "0")); } catch (const std::invalid_argument&) {} catch (const std::out_of_range&) {} @@ -1461,11 +1462,11 @@ namespace Net { saved_stat.rollover += saved_stat.last; saved_stat.last = 0; } - if (cmp_greater((unsigned long long)saved_stat.rollover + (unsigned long long)val, numeric_limits::max())) { + if (cmp_greater(static_cast(saved_stat.rollover) + static_cast(val), numeric_limits::max())) { saved_stat.rollover = 0; saved_stat.last = 0; } - saved_stat.speed = round((double)(val - saved_stat.last) / ((double)(new_timestamp - timestamp) / 1000)); + saved_stat.speed = round(static_cast(val - saved_stat.last) / (new_timestamp - timestamp) / 1000.0); if (saved_stat.speed > saved_stat.top) saved_stat.top = saved_stat.speed; if (saved_stat.offset > val + saved_stat.rollover) saved_stat.offset = 0; saved_stat.total = (val + saved_stat.rollover) - saved_stat.offset; @@ -1544,7 +1545,7 @@ namespace Net { const long long avg_speed = (net[selected_iface].bandwidth[dir].size() > 5 ? std::accumulate(net.at(selected_iface).bandwidth.at(dir).rbegin(), net.at(selected_iface).bandwidth.at(dir).rbegin() + 5, 0ll) / 5 : net[selected_iface].stat[dir].speed); - graph_max[dir] = max(uint64_t(avg_speed * (sel == 0 ? 1.3 : 3.0)), (uint64_t)10 << 10); + graph_max[dir] = max(static_cast(avg_speed * (sel == 0 ? 1.3 : 3.0)), static_cast(10) << 10); max_count[dir][0] = max_count[dir][1] = 0; redraw = true; if (net_sync) sync = true; @@ -1602,7 +1603,7 @@ namespace Proc { //? Update cpu percent deque for process cpu graph if (not Config::getB("proc_per_core")) detailed.entry.cpu_p *= Shared::coreCount; - detailed.cpu_percent.push_back(clamp((long long)round(detailed.entry.cpu_p), 0ll, 100ll)); + detailed.cpu_percent.push_back(clamp(llround(detailed.entry.cpu_p), 0ll, 100ll)); while (cmp_greater(detailed.cpu_percent.size(), width)) detailed.cpu_percent.pop_front(); //? Process runtime @@ -1651,7 +1652,7 @@ namespace Proc { detailed.memory = floating_humanizer(detailed.entry.mem); } if (detailed.first_mem == -1 or detailed.first_mem < detailed.mem_bytes.back() / 2 or detailed.first_mem > detailed.mem_bytes.back() * 4) { - detailed.first_mem = min((uint64_t)detailed.mem_bytes.back() * 2, Mem::get_totalMem()); + detailed.first_mem = min(static_cast(detailed.mem_bytes.back()) * 2, Mem::get_totalMem()); redraw = true; } @@ -1934,10 +1935,10 @@ namespace Proc { } //? Process cpu usage since last update - new_proc.cpu_p = clamp(round(cmult * 1000 * (cpu_t - new_proc.cpu_t) / max((uint64_t)1, cputimes - old_cputimes)) / 10.0, 0.0, 100.0 * Shared::coreCount); + new_proc.cpu_p = clamp(round(cmult * 1000 * (cpu_t - new_proc.cpu_t) / max(static_cast(1), cputimes - old_cputimes)) / 10.0, 0.0, 100.0 * Shared::coreCount); //? Process cumulative cpu usage since process start - new_proc.cpu_c = (double)cpu_t / max(1.0, (uptime * Shared::clkTck) - new_proc.cpu_s); + new_proc.cpu_c = cpu_t / max(1.0, (uptime * Shared::clkTck) - new_proc.cpu_s); //? Update cached value with latest cpu times new_proc.cpu_t = cpu_t; @@ -2051,7 +2052,7 @@ namespace Proc { } } - numpids = (int)current_procs.size() - filter_found; + numpids = current_procs.size() - filter_found; return current_procs; } diff --git a/src/osx/btop_collect.cpp b/src/osx/btop_collect.cpp index 26a93d3..1e342b4 100644 --- a/src/osx/btop_collect.cpp +++ b/src/osx/btop_collect.cpp @@ -107,7 +107,7 @@ namespace Mem { processor_info_array_t info_array; mach_msg_type_number_t info_count; MachProcessorInfo() {} - virtual ~MachProcessorInfo() {vm_deallocate(mach_task_self(), (vm_address_t)info_array, (vm_size_t)sizeof(processor_info_array_t) * info_count);} + virtual ~MachProcessorInfo() {vm_deallocate(mach_task_self(), reinterpret_cast(info_array), static_cast(sizeof(processor_info_array_t)) * info_count);} }; namespace Shared { @@ -349,7 +349,7 @@ namespace Cpu { //? If core mapping from cpuinfo was incomplete try to guess remainder, if missing completely, map 0-0 1-1 2-2 etc. if (cmp_less(core_map.size(), Shared::coreCount)) { - if (Shared::coreCount % 2 == 0 and (long) core_map.size() == Shared::coreCount / 2) { + if (Shared::coreCount % 2 == 0 and static_cast(core_map.size()) == Shared::coreCount / 2) { for (int i = 0, n = 0; i < Shared::coreCount / 2; i++) { if (std::cmp_greater_equal(n, core_sensors.size())) n = 0; core_map[Shared::coreCount / 2 + i] = n++; @@ -411,17 +411,17 @@ namespace Cpu { if (CFArrayGetCount(one_ps_descriptor())) { CFDictionaryRef one_ps = IOPSGetPowerSourceDescription(ps_info(), CFArrayGetValueAtIndex(one_ps_descriptor(), 0)); has_battery = true; - CFNumberRef remaining = (CFNumberRef)CFDictionaryGetValue(one_ps, CFSTR(kIOPSTimeToEmptyKey)); + CFNumberRef remaining = static_cast(CFDictionaryGetValue(one_ps, CFSTR(kIOPSTimeToEmptyKey))); int32_t estimatedMinutesRemaining; if (remaining) { CFNumberGetValue(remaining, kCFNumberSInt32Type, &estimatedMinutesRemaining); seconds = estimatedMinutesRemaining * 60; } - CFNumberRef charge = (CFNumberRef)CFDictionaryGetValue(one_ps, CFSTR(kIOPSCurrentCapacityKey)); + CFNumberRef charge = static_cast(CFDictionaryGetValue(one_ps, CFSTR(kIOPSCurrentCapacityKey))); if (charge) { CFNumberGetValue(charge, kCFNumberSInt32Type, &percent); } - CFBooleanRef charging = (CFBooleanRef)CFDictionaryGetValue(one_ps, CFSTR(kIOPSIsChargingKey)); + CFBooleanRef charging = static_cast(CFDictionaryGetValue(one_ps, CFSTR(kIOPSIsChargingKey))); if (charging) { bool isCharging = CFBooleanGetValue(charging); if (isCharging) { @@ -460,7 +460,7 @@ namespace Cpu { if (error != KERN_SUCCESS) { Logger::error("Failed getting CPU load info"); } - cpu_load_info = (processor_cpu_load_info_data_t *)info.info_array; + cpu_load_info = reinterpret_cast(info.info_array); long long global_totals = 0; long long global_idles = 0; vector times_summed = {0, 0, 0, 0}; @@ -490,14 +490,14 @@ namespace Cpu { core_old_totals.at(i) = totals; core_old_idles.at(i) = idles; - cpu.core_percent.at(i).push_back(clamp((long long)round((double)(calc_totals - calc_idles) * 100 / calc_totals), 0ll, 100ll)); + cpu.core_percent.at(i).push_back(clamp(llround((calc_totals - calc_idles) * 100.0 / calc_totals), 0ll, 100ll)); //? Reduce size if there are more values than needed for graph if (cpu.core_percent.at(i).size() > 40) cpu.core_percent.at(i).pop_front(); } catch (const std::exception &e) { - Logger::error("Cpu::collect() : " + (string)e.what()); - throw std::runtime_error("collect() : " + (string)e.what()); + Logger::error("Cpu::collect() : " + string{e.what()}); + throw std::runtime_error("collect() : " + string{e.what()}); } } @@ -506,7 +506,7 @@ namespace Cpu { //? Populate cpu.cpu_percent with all fields from syscall for (int ii = 0; const auto &val : times_summed) { - cpu.cpu_percent.at(time_names.at(ii)).push_back(clamp((long long)round((double)(val - cpu_old.at(time_names.at(ii))) * 100 / calc_totals), 0ll, 100ll)); + cpu.cpu_percent.at(time_names.at(ii)).push_back(clamp(llround((val - cpu_old.at(time_names.at(ii))) * 100.0 / calc_totals), 0ll, 100ll)); cpu_old.at(time_names.at(ii)) = val; //? Reduce size if there are more values than needed for graph @@ -519,7 +519,7 @@ namespace Cpu { cpu_old.at("idles") = global_idles; //? Total usage of cpu - cpu.cpu_percent.at("total").push_back(clamp((long long)round((double)(calc_totals - calc_idles) * 100 / calc_totals), 0ll, 100ll)); + cpu.cpu_percent.at("total").push_back(clamp(llround((calc_totals - calc_idles) * 100.0 / calc_totals), 0ll, 100ll)); //? Reduce size if there are more values than needed for graph while (cmp_greater(cpu.cpu_percent.at("total").size(), width * 2)) cpu.cpu_percent.at("total").pop_front(); @@ -555,7 +555,7 @@ namespace Mem { } int64_t getCFNumber(CFDictionaryRef dict, const void *key) { - CFNumberRef ref = (CFNumberRef)CFDictionaryGetValue(dict, key); + CFNumberRef ref = static_cast(CFDictionaryGetValue(dict, key)); if (ref) { int64_t value; CFNumberGetValue(ref, kCFNumberSInt64Type, &value); @@ -565,7 +565,7 @@ namespace Mem { } string getCFString(io_registry_entry_t volumeRef, CFStringRef key) { - CFStringRef bsdNameRef = (CFStringRef)IORegistryEntryCreateCFProperty(volumeRef, key, kCFAllocatorDefault, 0); + CFStringRef bsdNameRef = static_cast(IORegistryEntryCreateCFProperty(volumeRef, key, kCFAllocatorDefault, 0)); if (bsdNameRef) { char buf[200]; CFStringGetCString(bsdNameRef, buf, 200, kCFStringEncodingASCII); @@ -576,7 +576,7 @@ namespace Mem { } bool isWhole(io_registry_entry_t volumeRef) { - CFBooleanRef isWhole = (CFBooleanRef)IORegistryEntryCreateCFProperty(volumeRef, CFSTR("Whole"), kCFAllocatorDefault, 0); + CFBooleanRef isWhole = static_cast(IORegistryEntryCreateCFProperty(volumeRef, CFSTR("Whole"), kCFAllocatorDefault, 0)); Boolean val = CFBooleanGetValue(isWhole); CFRelease(isWhole); return bool(val); @@ -624,16 +624,16 @@ namespace Mem { if (disks.contains(mountpoint)) { auto& disk = disks.at(mountpoint); CFDictionaryRef properties; - IORegistryEntryCreateCFProperties(volumeRef, (CFMutableDictionaryRef *)&properties, kCFAllocatorDefault, 0); + IORegistryEntryCreateCFProperties(volumeRef, const_cast(&properties), kCFAllocatorDefault, 0); if (properties) { - CFDictionaryRef statistics = (CFDictionaryRef)CFDictionaryGetValue(properties, CFSTR("Statistics")); + CFDictionaryRef statistics = static_cast(CFDictionaryGetValue(properties, CFSTR("Statistics"))); if (statistics) { disk_ios++; int64_t readBytes = getCFNumber(statistics, CFSTR("Bytes read from block device")); if (disk.io_read.empty()) disk.io_read.push_back(0); else - disk.io_read.push_back(max((int64_t)0, (readBytes - disk.old_io.at(0)))); + disk.io_read.push_back(max(static_cast(0), (readBytes - disk.old_io.at(0)))); disk.old_io.at(0) = readBytes; while (cmp_greater(disk.io_read.size(), width * 2)) disk.io_read.pop_front(); @@ -641,7 +641,7 @@ namespace Mem { if (disk.io_write.empty()) disk.io_write.push_back(0); else - disk.io_write.push_back(max((int64_t)0, (writeBytes - disk.old_io.at(1)))); + disk.io_write.push_back(max(static_cast(0), (writeBytes - disk.old_io.at(1)))); disk.old_io.at(1) = writeBytes; while (cmp_greater(disk.io_write.size(), width * 2)) disk.io_write.pop_front(); @@ -649,7 +649,7 @@ namespace Mem { if (disk.io_activity.empty()) disk.io_activity.push_back(0); else - disk.io_activity.push_back(clamp((long)round((double)(disk.io_write.back() + disk.io_read.back()) / (1 << 20)), 0l, 100l)); + disk.io_activity.push_back(clamp(lround(static_cast(disk.io_write.back() + disk.io_read.back()) / (1 << 20)), 0l, 100l)); while (cmp_greater(disk.io_activity.size(), width * 2)) disk.io_activity.pop_front(); } } @@ -674,7 +674,7 @@ namespace Mem { vm_statistics64 p; mach_msg_type_number_t info_size = HOST_VM_INFO64_COUNT; - if (host_statistics64(mach_host_self(), HOST_VM_INFO64, (host_info64_t)&p, &info_size) == 0) { + if (host_statistics64(mach_host_self(), HOST_VM_INFO64, reinterpret_cast(&p), &info_size) == 0) { mem.stats.at("free") = p.free_count * Shared::pageSize; mem.stats.at("cached") = p.external_page_count * Shared::pageSize; mem.stats.at("used") = (p.active_count + p.inactive_count + p.wire_count) * Shared::pageSize; @@ -693,7 +693,7 @@ namespace Mem { if (show_swap and mem.stats.at("swap_total") > 0) { for (const auto &name : swap_names) { - mem.percent.at(name).push_back(round((double)mem.stats.at(name) * 100 / mem.stats.at("swap_total"))); + mem.percent.at(name).push_back(round(mem.stats.at(name) * 100.0 / mem.stats.at("swap_total"))); while (cmp_greater(mem.percent.at(name).size(), width * 2)) mem.percent.at(name).pop_front(); } @@ -702,7 +702,7 @@ namespace Mem { has_swap = false; //? Calculate percentages for (const auto &name : mem_names) { - mem.percent.at(name).push_back(round((double)mem.stats.at(name) * 100 / Shared::totalMem)); + mem.percent.at(name).push_back(round(mem.stats.at(name) * 100.0 / Shared::totalMem)); while (cmp_greater(mem.percent.at(name).size(), width * 2)) mem.percent.at(name).pop_front(); } @@ -786,7 +786,7 @@ namespace Mem { disk.total = vfs.f_blocks * vfs.f_frsize; disk.free = vfs.f_bfree * vfs.f_frsize; disk.used = disk.total - disk.free; - disk.used_percent = round((double)disk.used * 100 / disk.total); + disk.used_percent = round(disk.used * 100.0 / disk.total); disk.free_percent = 100 - disk.used_percent; } @@ -917,11 +917,11 @@ namespace Net { char *lim = buf.get() + len; char *next = nullptr; for (next = buf.get(); next < lim;) { - struct if_msghdr *ifm = (struct if_msghdr *)next; + struct if_msghdr *ifm = reinterpret_cast(next); next += ifm->ifm_msglen; if (ifm->ifm_type == RTM_IFINFO2) { - struct if_msghdr2 *if2m = (struct if_msghdr2 *)ifm; - struct sockaddr_dl *sdl = (struct sockaddr_dl *)(if2m + 1); + struct if_msghdr2 *if2m = reinterpret_cast(ifm); + struct sockaddr_dl *sdl = reinterpret_cast(if2m + 1); char iface[32]; strncpy(iface, sdl->sdl_data, sdl->sdl_nlen); iface[sdl->sdl_nlen] = 0; @@ -943,11 +943,11 @@ namespace Net { saved_stat.rollover += saved_stat.last; saved_stat.last = 0; } - if (cmp_greater((unsigned long long)saved_stat.rollover + (unsigned long long)val, numeric_limits::max())) { + if (cmp_greater(static_cast(saved_stat.rollover) + static_cast(val), numeric_limits::max())) { saved_stat.rollover = 0; saved_stat.last = 0; } - saved_stat.speed = round((double)(val - saved_stat.last) / ((double)(new_timestamp - timestamp) / 1000)); + saved_stat.speed = round(static_cast(val - saved_stat.last) / (new_timestamp - timestamp) / 1000); if (saved_stat.speed > saved_stat.top) saved_stat.top = saved_stat.speed; if (saved_stat.offset > val + saved_stat.rollover) saved_stat.offset = 0; saved_stat.total = (val + saved_stat.rollover) - saved_stat.offset; @@ -1024,7 +1024,7 @@ namespace Net { const long long avg_speed = (net[selected_iface].bandwidth[dir].size() > 5 ? std::accumulate(net.at(selected_iface).bandwidth.at(dir).rbegin(), net.at(selected_iface).bandwidth.at(dir).rbegin() + 5, 0ll) / 5 : net[selected_iface].stat[dir].speed); - graph_max[dir] = max(uint64_t(avg_speed * (sel == 0 ? 1.3 : 3.0)), (uint64_t)10 << 10); + graph_max[dir] = max(uint64_t(avg_speed * (sel == 0 ? 1.3 : 3.0)), static_cast(10) << 10); max_count[dir][0] = max_count[dir][1] = 0; redraw = true; if (net_sync) sync = true; @@ -1087,7 +1087,7 @@ namespace Proc { //? Update cpu percent deque for process cpu graph if (not Config::getB("proc_per_core")) detailed.entry.cpu_p *= Shared::coreCount; - detailed.cpu_percent.push_back(clamp((long long)round(detailed.entry.cpu_p), 0ll, 100ll)); + detailed.cpu_percent.push_back(clamp(llround(detailed.entry.cpu_p), 0ll, 100ll)); while (cmp_greater(detailed.cpu_percent.size(), width)) detailed.cpu_percent.pop_front(); //? Process runtime : current time - start time (both in unix time - seconds since epoch) @@ -1109,14 +1109,14 @@ namespace Proc { detailed.memory = floating_humanizer(detailed.entry.mem); if (detailed.first_mem == -1 or detailed.first_mem < detailed.mem_bytes.back() / 2 or detailed.first_mem > detailed.mem_bytes.back() * 4) { - detailed.first_mem = min((uint64_t)detailed.mem_bytes.back() * 2, Mem::get_totalMem()); + detailed.first_mem = min(static_cast(detailed.mem_bytes.back()) * 2, Mem::get_totalMem()); redraw = true; } while (cmp_greater(detailed.mem_bytes.size(), width)) detailed.mem_bytes.pop_front(); rusage_info_current rusage; - if (proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, (void **)&rusage) == 0) { + if (proc_pid_rusage(pid, RUSAGE_INFO_CURRENT, reinterpret_cast(&rusage)) == 0) { // this fails for processes we don't own - same as in Linux detailed.io_read = floating_humanizer(rusage.ri_diskio_bytesread); detailed.io_write = floating_humanizer(rusage.ri_diskio_byteswritten); @@ -1160,7 +1160,7 @@ namespace Proc { if (error != KERN_SUCCESS) { Logger::error("Failed getting CPU load info"); } - cpu_load_info = (processor_cpu_load_info_data_t *)info.info_array; + cpu_load_info = reinterpret_cast(info.info_array); cputimes = 0; for (natural_t i = 0; i < cpu_count; i++) { cputimes += (cpu_load_info[i].cpu_ticks[CPU_STATE_USER] @@ -1186,7 +1186,7 @@ namespace Proc { size_t count = size / sizeof(struct kinfo_proc); for (size_t i = 0; i < count; i++) { //* iterate over all processes in kinfo_proc struct kinfo_proc& kproc = processes.get()[i]; - const size_t pid = (size_t)kproc.kp_proc.p_pid; + const size_t pid = static_cast(kproc.kp_proc.p_pid); if (pid < 1) continue; found.push_back(pid); @@ -1211,7 +1211,7 @@ namespace Proc { //? Get process arguments if possible, fallback to process path in case of failure if (Shared::arg_max > 0) { std::unique_ptr proc_chars(new char[Shared::arg_max]); - int mib[] = {CTL_KERN, KERN_PROCARGS2, (int)pid}; + int mib[] = {CTL_KERN, KERN_PROCARGS2, static_cast(pid)}; size_t argmax = Shared::arg_max; if (sysctl(mib, 3, proc_chars.get(), &argmax, nullptr, 0) == 0) { int argc = 0; @@ -1221,7 +1221,7 @@ namespace Proc { if (size_t start_pos = proc_args.find_first_not_of('\0', null_pos); start_pos != string::npos) { while (argc-- > 0 and null_pos != string::npos and cmp_less(new_proc.cmd.size(), 1000)) { null_pos = proc_args.find('\0', start_pos); - new_proc.cmd += (string)proc_args.substr(start_pos, null_pos - start_pos) + ' '; + new_proc.cmd += static_cast(proc_args.substr(start_pos, null_pos - start_pos)) + ' '; start_pos = null_pos + 1; } } @@ -1256,7 +1256,7 @@ namespace Proc { new_proc.cpu_p = clamp(round(((cpu_t - new_proc.cpu_t) * Shared::machTck) / ((cputimes - old_cputimes) * Shared::clkTck)) * cmult / 1000.0, 0.0, 100.0 * Shared::coreCount); //? Process cumulative cpu usage since process start - new_proc.cpu_c = (double)(cpu_t * Shared::machTck) / (timeNow - new_proc.cpu_s); + new_proc.cpu_c = static_cast(cpu_t * Shared::machTck) / (timeNow - new_proc.cpu_s); //? Update cached value with latest cpu times new_proc.cpu_t = cpu_t; @@ -1366,7 +1366,7 @@ namespace Proc { } } - numpids = (int)current_procs.size() - filter_found; + numpids = static_cast(current_procs.size()) - filter_found; return current_procs; } } // namespace Proc diff --git a/src/osx/sensors.cpp b/src/osx/sensors.cpp index 965d9a9..73a2c03 100644 --- a/src/osx/sensors.cpp +++ b/src/osx/sensors.cpp @@ -83,7 +83,7 @@ long long Cpu::ThermalSensors::getSensors() { if (matchingsrvs) { long count = CFArrayGetCount(matchingsrvs); for (int i = 0; i < count; i++) { - IOHIDServiceClientRef sc = (IOHIDServiceClientRef)CFArrayGetValueAtIndex(matchingsrvs, i); + IOHIDServiceClientRef sc = reinterpret_cast(const_cast(CFArrayGetValueAtIndex(matchingsrvs, i))); if (sc) { CFStringRef name = IOHIDServiceClientCopyProperty(sc, CFSTR("Product")); // here we use ...CopyProperty if (name) { diff --git a/src/osx/smc.cpp b/src/osx/smc.cpp index 6c483db..eac7695 100644 --- a/src/osx/smc.cpp +++ b/src/osx/smc.cpp @@ -29,7 +29,7 @@ static UInt32 _strtoul(char *str, int size, int base) { if (base == 16) { total += str[i] << (size - 1 - i) * 8; } else { - total += (unsigned char)(str[i] << (size - 1 - i) * 8); + total += static_cast(str[i] << (size - 1 - i) * 8); } } return total; @@ -38,10 +38,10 @@ static UInt32 _strtoul(char *str, int size, int base) { static void _ultostr(char *str, UInt32 val) { str[0] = '\0'; snprintf(str, 5, "%c%c%c%c", - (unsigned int)val >> 24, - (unsigned int)val >> 16, - (unsigned int)val >> 8, - (unsigned int)val); + static_cast(val) >> 24, + static_cast(val) >> 16, + static_cast(val) >> 8, + static_cast(val)); } namespace Cpu { @@ -77,7 +77,7 @@ namespace Cpu { if (val.dataSize > 0) { if (strcmp(val.dataType, DATATYPE_SP78) == 0) { // convert sp78 value to temperature - int intValue = val.bytes[0] * 256 + (unsigned char)val.bytes[1]; + int intValue = val.bytes[0] * 256 + static_cast(val.bytes[1]); return static_cast(intValue / 256.0); } } @@ -93,7 +93,7 @@ namespace Cpu { long long SMCConnection::getTemp(int core) { char key[] = SMC_KEY_CPU_TEMP; if (core >= 0) { - if ((size_t)core > MaxIndexCount) { + if (static_cast(core) > MaxIndexCount) { return -1; } snprintf(key, 5, "TC%1cc", KeyIndexes[core]);