Skip to content

Commit

Permalink
parse: move some query.hpp code to parse.hpp + remove some bloat code
Browse files Browse the repository at this point in the history
  • Loading branch information
Toni500github committed Jun 26, 2024
1 parent 70db66f commit 4c791ed
Show file tree
Hide file tree
Showing 6 changed files with 51 additions and 62 deletions.
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -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)

Expand Down
21 changes: 21 additions & 0 deletions include/parse.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#include <unordered_map>
#include <variant>
#include <string>
#include <memory>

#include "config.hpp"

using systemInfo_t = std::unordered_map<std::string, std::unordered_map<std::string, std::variant<std::string, size_t, float>>>;
using variant = std::variant<std::string, size_t, float>;

// 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);
21 changes: 1 addition & 20 deletions include/query.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,12 @@

#include "util.hpp"
#include "config.hpp"
#include "parse.hpp"

#include <array>
#include <fstream>
#include <memory>
#include <vector>
#include <pwd.h>
#include <unordered_map>
#include <variant>
#include <sys/sysinfo.h>
#include <sys/utsname.h>
#include <unistd.h>
Expand All @@ -21,11 +19,6 @@ extern "C" {

using smart_pci_access_ptr = std::unique_ptr<pci_access, decltype(&pci_cleanup)>;

using systemInfo_t = std::unordered_map<std::string, std::unordered_map<std::string, std::variant<std::string, size_t>>>;
using systemInfofloat_t = std::unordered_map<std::string, std::unordered_map<std::string, std::variant<std::string, float>>>;
using variant = std::variant<std::string, size_t>;
using variantfloat = std::variant<std::string, float>;

namespace Query {

class System {
Expand Down Expand Up @@ -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;
Expand Down
9 changes: 4 additions & 5 deletions src/display.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ std::string Display::detect_distro(Config& config) {

std::vector<std::string>& 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
Expand All @@ -50,18 +49,18 @@ std::vector<std::string>& 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!");
}
}

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;
Expand All @@ -80,7 +79,7 @@ std::vector<std::string>& 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);
Expand Down
7 changes: 3 additions & 4 deletions src/gui.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,6 @@ using namespace GUI;
// Display::render but only for images on GUI
static std::vector<std::string>& render_with_image(Config& config, colors_t& colors) {
systemInfo_t systemInfo{};
systemInfofloat_t systemInfofloat;

int image_width, image_height, channels;

Expand All @@ -48,18 +47,18 @@ static std::vector<std::string>& 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!");
}
}

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++) {
Expand Down
53 changes: 21 additions & 32 deletions src/parse.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<std::string> 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<size_t>( result ) )
return std::to_string( std::get<size_t>( result ) );

else if ( std::holds_alternative<float>(resultfloat) )
return fmt::format("{:.2f}", (std::get<float>(resultfloat)));
else if ( std::holds_alternative<float>(result) )
return fmt::format("{:.2f}", (std::get<float>(result)));

else
return std::get<std::string>( result );
Expand All @@ -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;
Expand Down Expand Up @@ -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" ) {
Expand Down Expand Up @@ -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") {
Expand Down Expand Up @@ -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")) {
Expand Down Expand Up @@ -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);

Expand Down Expand Up @@ -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;
}
}

Expand Down

0 comments on commit 4c791ed

Please sign in to comment.