diff --git a/Makefile b/Makefile index d9ef51ba..9eafa090 100644 --- a/Makefile +++ b/Makefile @@ -37,7 +37,7 @@ SRC = $(sort $(wildcard src/*.cpp src/query/*.cpp)) OBJ = $(SRC:.cpp=.o) LDFLAGS += -lmagic -lpci -L./$(BUILDDIR)/fmt -lfmt CXXFLAGS ?= -mtune=generic -march=native -CXXFLAGS += -02 -Wno-ignored-attributes -funroll-all-loops -Iinclude -std=c++17 $(VARS) -DVERSION=\"$(VERSION)\" -DBRANCH=\"$(BRANCH)\" +CXXFLAGS += -O2 -Wno-ignored-attributes -funroll-all-loops -Iinclude -std=c++17 $(VARS) -DVERSION=\"$(VERSION)\" -DBRANCH=\"$(BRANCH)\" all: fmt toml $(TARGET) diff --git a/include/parse.hpp b/include/parse.hpp new file mode 100644 index 00000000..c9d97459 --- /dev/null +++ b/include/parse.hpp @@ -0,0 +1,21 @@ +#include +#include +#include +#include + +#include "config.hpp" + +using systemInfo_t = std::unordered_map>>; +using variant = std::variant; + +// Parse input, in-place, with data from systemInfo. +// Documentation on formatting is in the default config.toml file. +// pureOutput is set to the string, but without the brackets. +std::string parse(const std::string& input, systemInfo_t& systemInfo, std::string &pureOutput, Config& config, colors_t& colors); +std::string parse(const std::string& input, systemInfo_t& systemInfo, Config& config, colors_t& colors); + +// Set module values to a systemInfo_t map. +// If the name of said module matches any module name, it will be added +// else, error out. +void addModuleValues(systemInfo_t& sysInfo, const std::string_view moduleName); +void addValueFromModule(systemInfo_t& sysInfo, const std::string& moduleName, const std::string& moduleValueName); diff --git a/include/query.hpp b/include/query.hpp index f7114e1e..b8b89a51 100644 --- a/include/query.hpp +++ b/include/query.hpp @@ -3,14 +3,12 @@ #include "util.hpp" #include "config.hpp" +#include "parse.hpp" #include #include -#include #include #include -#include -#include #include #include #include @@ -21,11 +19,6 @@ extern "C" { using smart_pci_access_ptr = std::unique_ptr; -using systemInfo_t = std::unordered_map>>; -using systemInfofloat_t = std::unordered_map>>; -using variant = std::variant; -using variantfloat = std::variant; - namespace Query { class System { @@ -90,18 +83,6 @@ class RAM { }; -// Parse input, in-place, with data from systemInfo. -// Documentation on formatting is in the default config.toml file. -// pureOutput is set to the string, but without the brackets. -std::string parse(const std::string& input, systemInfo_t& systemInfo, systemInfofloat_t& sysInfofloat, std::string &pureOutput, Config& config, colors_t& colors); -std::string parse(const std::string& input, systemInfo_t& systemInfo, systemInfofloat_t& sysInfofloat, Config& config, colors_t& colors); - -// Set module values to a systemInfo_t map. -// If the name of said module matches any module name, it will be added -// else, error out. -void addModuleValues(systemInfo_t& sysInfo, systemInfofloat_t& sysInfofloat, const std::string_view moduleName); -void addValueFromModule(systemInfo_t& sysInfo, systemInfofloat_t& sysInfofloat, const std::string& moduleName, const std::string& moduleValueName); - //inline Query::System query_system; //inline Query::CPU query_cpu; //inline Query::GPU query_gpu; diff --git a/src/display.cpp b/src/display.cpp index d51080e9..7c51663b 100644 --- a/src/display.cpp +++ b/src/display.cpp @@ -29,7 +29,6 @@ std::string Display::detect_distro(Config& config) { std::vector& Display::render(Config& config, colors_t& colors) { systemInfo_t systemInfo{}; - systemInfofloat_t systemInfofloat{}; // first check if the file is an image // using the same library that "file" uses @@ -50,10 +49,10 @@ std::vector& Display::render(Config& config, colors_t& colors) { { // only 1 element case 0: - addModuleValues(systemInfo, systemInfofloat, include); + addModuleValues(systemInfo, include); break; case 1: - addValueFromModule(systemInfo, systemInfofloat, include_nodes[0], include_nodes[1]); + addValueFromModule(systemInfo, include_nodes[0], include_nodes[1]); break; default: die("Include has too many namespaces!"); @@ -61,7 +60,7 @@ std::vector& Display::render(Config& config, colors_t& colors) { } for (std::string& layout : config.layouts) { - layout = parse(layout, systemInfo, systemInfofloat, config, colors); + layout = parse(layout, systemInfo, config, colors); } std::string path = config.m_display_distro ? detect_distro(config) : config.source_path; @@ -80,7 +79,7 @@ std::vector& Display::render(Config& config, colors_t& colors) { while (std::getline(file, line)) { std::string pureOutput; - std::string asciiArt_s = parse(line, systemInfo, systemInfofloat, pureOutput, config, colors); + std::string asciiArt_s = parse(line, systemInfo, pureOutput, config, colors); asciiArt_s += config.gui ? "" : NOCOLOR; asciiArt.push_back(asciiArt_s); diff --git a/src/gui.cpp b/src/gui.cpp index 64ca963a..6aa14505 100644 --- a/src/gui.cpp +++ b/src/gui.cpp @@ -29,7 +29,6 @@ using namespace GUI; // Display::render but only for images on GUI static std::vector& render_with_image(Config& config, colors_t& colors) { systemInfo_t systemInfo{}; - systemInfofloat_t systemInfofloat; int image_width, image_height, channels; @@ -48,10 +47,10 @@ static std::vector& render_with_image(Config& config, colors_t& col { // only 1 element case 0: - addModuleValues(systemInfo, systemInfofloat, include); + addModuleValues(systemInfo, include); break; case 1: - addValueFromModule(systemInfo, systemInfofloat, include_nodes[0], include_nodes[1]); + addValueFromModule(systemInfo, include_nodes[0], include_nodes[1]); break; default: die("Include has too many namespaces!"); @@ -59,7 +58,7 @@ static std::vector& render_with_image(Config& config, colors_t& col } for (std::string& layout : config.layouts) { - layout = parse(layout, systemInfo, systemInfofloat, config, colors); + layout = parse(layout, systemInfo, config, colors); } for (size_t i = 0; i < config.layouts.size(); i++) { diff --git a/src/parse.cpp b/src/parse.cpp index ffea747b..9c80d98a 100644 --- a/src/parse.cpp +++ b/src/parse.cpp @@ -101,30 +101,24 @@ static std::string check_gui_ansi_clr(std::string& str) { return str; } -static std::string getInfoFromName( systemInfo_t& systemInfo, systemInfofloat_t& systemInfofloat, const std::string& name ) +static std::string getInfoFromName( systemInfo_t& systemInfo, const std::string& name ) { std::vector sections = split( name, '.' ); try { - /*if ( systemInfo.find( sections[0] ) == systemInfo.end() ) + if ( systemInfo.find( sections[0] ) == systemInfo.end() ) throw std::out_of_range("genius"); if ( systemInfo[sections[0]].find( sections[1] ) == systemInfo[sections[0]].end() ) throw std::out_of_range("genius"); - if ( systemInfofloat.find( sections[0] ) == systemInfofloat.end() ) - throw std::out_of_range("genius"); - if ( systemInfofloat[sections[0]].find( sections[1] ) == systemInfofloat[sections[0]].end() ) - throw std::out_of_range("genius");*/ - auto result = systemInfo[sections[0]][sections[1]]; - auto resultfloat = systemInfofloat[sections[0]][sections[1]]; if ( std::holds_alternative( result ) ) return std::to_string( std::get( result ) ); - else if ( std::holds_alternative(resultfloat) ) - return fmt::format("{:.2f}", (std::get(resultfloat))); + else if ( std::holds_alternative(result) ) + return fmt::format("{:.2f}", (std::get(result))); else return std::get( result ); @@ -135,7 +129,7 @@ static std::string getInfoFromName( systemInfo_t& systemInfo, systemInfofloat_t& }; } -static std::string _parse( const std::string& input, systemInfo_t& systemInfo, systemInfofloat_t& sysInfofloat, std::string &pureOutput, Config& config, colors_t& colors ) +static std::string _parse( const std::string& input, systemInfo_t& systemInfo, std::string &pureOutput, Config& config, colors_t& colors ) { std::string output = input; pureOutput = output; @@ -216,7 +210,7 @@ static std::string _parse( const std::string& input, systemInfo_t& systemInfo, s break; case '>': output = output.replace( dollarSignIndex, ( endBracketIndex + 1 ) - dollarSignIndex, - getInfoFromName( systemInfo, sysInfofloat, command ) ); + getInfoFromName( systemInfo, command ) ); break; case '}': // please pay very attention when reading this unreadable code if ( command == "0" ) { @@ -328,15 +322,15 @@ static std::string _parse( const std::string& input, systemInfo_t& systemInfo, s return output; } -std::string parse(const std::string& input, systemInfo_t& systemInfo, systemInfofloat_t& sysInfofloat, std::string &pureOutput, Config& config, colors_t& colors) { - return _parse(input, systemInfo, sysInfofloat, pureOutput, config, colors); +std::string parse(const std::string& input, systemInfo_t& systemInfo, std::string &pureOutput, Config& config, colors_t& colors) { + return _parse(input, systemInfo, pureOutput, config, colors); } -std::string parse(const std::string& input, systemInfo_t& systemInfo, systemInfofloat_t& sysInfofloat, Config& config, colors_t& colors) { +std::string parse(const std::string& input, systemInfo_t& systemInfo, Config& config, colors_t& colors) { std::string _; - return _parse(input, systemInfo, sysInfofloat, _, config, colors); + return _parse(input, systemInfo, _, config, colors); } -void addModuleValues(systemInfo_t& sysInfo, systemInfofloat_t& sysInfofloat, const std::string_view moduleName) { +void addModuleValues(systemInfo_t& sysInfo, const std::string_view moduleName) { // yikes, here we go. if (moduleName == "os") { @@ -368,18 +362,13 @@ void addModuleValues(systemInfo_t& sysInfo, systemInfofloat_t& sysInfofloat, con sysInfo.insert( {"cpu", { {"name", variant(query_cpu.name())}, - {"nproc", variant(query_cpu.nproc())} + {"nproc", variant(query_cpu.nproc())}, + {"freq_cur", variant(query_cpu.freq_cur())}, + {"freq_max", variant(query_cpu.freq_max())}, + {"freq_min", variant(query_cpu.freq_min())}, + {"freq_bios_limit", variant(query_cpu.freq_bios_limit())} }} ); - sysInfofloat.insert( - {"cpu", { - {"freq_cur", variantfloat(query_cpu.freq_cur())}, - {"freq_max", variantfloat(query_cpu.freq_max())}, - {"freq_min", variantfloat(query_cpu.freq_min())}, - {"freq_bios_limit", variantfloat(query_cpu.freq_bios_limit())} - }} - ); - return; } if (hasStart(moduleName, "gpu")) { @@ -412,7 +401,7 @@ void addModuleValues(systemInfo_t& sysInfo, systemInfofloat_t& sysInfofloat, con die("Invalid module name {}!", moduleName); } -void addValueFromModule(systemInfo_t& sysInfo, systemInfofloat_t& sysInfofloat, const std::string& moduleName, const std::string& moduleValueName) { +void addValueFromModule(systemInfo_t& sysInfo, const std::string& moduleName, const std::string& moduleValueName) { // yikes, here we go. auto module_hash = fnv1a32::hash(moduleValueName); @@ -483,16 +472,16 @@ void addValueFromModule(systemInfo_t& sysInfo, systemInfofloat_t& sysInfofloat, sysInfo[moduleName].insert({moduleValueName, variant(query_cpu.nproc())}); break; case "freq_bios_limit"_fnv1a32: - sysInfofloat[moduleName].insert({moduleValueName, variantfloat(query_cpu.freq_bios_limit())}); break; + sysInfo[moduleName].insert({moduleValueName, variant(query_cpu.freq_bios_limit())}); break; case "freq_cur"_fnv1a32: - sysInfofloat[moduleName].insert({moduleValueName, variantfloat(query_cpu.freq_cur())}); break; + sysInfo[moduleName].insert({moduleValueName, variant(query_cpu.freq_cur())}); break; case "freq_max"_fnv1a32: - sysInfofloat[moduleName].insert({moduleValueName, variantfloat(query_cpu.freq_max())}); break; + sysInfo[moduleName].insert({moduleValueName, variant(query_cpu.freq_max())}); break; case "freq_min"_fnv1a32: - sysInfofloat[moduleName].insert({moduleValueName, variantfloat(query_cpu.freq_min())}); break; + sysInfo[moduleName].insert({moduleValueName, variant(query_cpu.freq_min())}); break; } }