mirror of
https://github.com/hyprwm/Hyprland
synced 2024-12-23 14:29:48 +01:00
varlist: move to a separate header, add join
This commit is contained in:
parent
5cc53c14d9
commit
2e34548aea
4 changed files with 90 additions and 69 deletions
|
@ -15,12 +15,11 @@
|
||||||
#include "../Window.hpp"
|
#include "../Window.hpp"
|
||||||
#include "../helpers/WLClasses.hpp"
|
#include "../helpers/WLClasses.hpp"
|
||||||
#include "../helpers/Monitor.hpp"
|
#include "../helpers/Monitor.hpp"
|
||||||
|
#include "../helpers/VarList.hpp"
|
||||||
|
|
||||||
#include "defaultConfig.hpp"
|
#include "defaultConfig.hpp"
|
||||||
#include "ConfigDataValues.hpp"
|
#include "ConfigDataValues.hpp"
|
||||||
|
|
||||||
#define STRVAL_EMPTY "[[EMPTY]]"
|
|
||||||
|
|
||||||
#define INITANIMCFG(name) animationConfig[name] = {}
|
#define INITANIMCFG(name) animationConfig[name] = {}
|
||||||
#define CREATEANIMCFG(name, parent) animationConfig[name] = {false, "", "", 0.f, -1, &animationConfig["global"], &animationConfig[parent]}
|
#define CREATEANIMCFG(name, parent) animationConfig[name] = {false, "", "", 0.f, -1, &animationConfig["global"], &animationConfig[parent]}
|
||||||
|
|
||||||
|
@ -75,73 +74,6 @@ struct SExecRequestedRule {
|
||||||
uint64_t iPid = 0;
|
uint64_t iPid = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
class CVarList {
|
|
||||||
public:
|
|
||||||
/* passing 's' as a separator will use std::isspace */
|
|
||||||
CVarList(const std::string& in, long unsigned int lastArgNo = 0, const char separator = ',') {
|
|
||||||
std::string curitem = "";
|
|
||||||
std::string argZ = in;
|
|
||||||
const bool SPACESEP = separator == 's';
|
|
||||||
|
|
||||||
auto nextItem = [&]() {
|
|
||||||
auto idx = lastArgNo != 0 && m_vArgs.size() >= lastArgNo - 1 ? std::string::npos : ([&]() -> size_t {
|
|
||||||
if (!SPACESEP)
|
|
||||||
return argZ.find_first_of(separator);
|
|
||||||
|
|
||||||
uint64_t pos = -1;
|
|
||||||
while (!std::isspace(argZ[++pos]) && pos < argZ.length())
|
|
||||||
;
|
|
||||||
|
|
||||||
return pos < argZ.length() ? pos : std::string::npos;
|
|
||||||
}());
|
|
||||||
|
|
||||||
if (idx != std::string::npos) {
|
|
||||||
curitem = argZ.substr(0, idx);
|
|
||||||
argZ = argZ.substr(idx + 1);
|
|
||||||
} else {
|
|
||||||
curitem = argZ;
|
|
||||||
argZ = STRVAL_EMPTY;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
nextItem();
|
|
||||||
|
|
||||||
while (curitem != STRVAL_EMPTY) {
|
|
||||||
m_vArgs.push_back(removeBeginEndSpacesTabs(curitem));
|
|
||||||
nextItem();
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
~CVarList() = default;
|
|
||||||
|
|
||||||
size_t size() const {
|
|
||||||
return m_vArgs.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string operator[](const long unsigned int& idx) const {
|
|
||||||
if (idx >= m_vArgs.size())
|
|
||||||
return "";
|
|
||||||
return m_vArgs[idx];
|
|
||||||
}
|
|
||||||
|
|
||||||
// for range-based loops
|
|
||||||
std::vector<std::string>::iterator begin() {
|
|
||||||
return m_vArgs.begin();
|
|
||||||
}
|
|
||||||
std::vector<std::string>::const_iterator begin() const {
|
|
||||||
return m_vArgs.begin();
|
|
||||||
}
|
|
||||||
std::vector<std::string>::iterator end() {
|
|
||||||
return m_vArgs.end();
|
|
||||||
}
|
|
||||||
std::vector<std::string>::const_iterator end() const {
|
|
||||||
return m_vArgs.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
std::vector<std::string> m_vArgs;
|
|
||||||
};
|
|
||||||
|
|
||||||
class CConfigManager {
|
class CConfigManager {
|
||||||
public:
|
public:
|
||||||
CConfigManager();
|
CConfigManager();
|
||||||
|
|
46
src/helpers/VarList.cpp
Normal file
46
src/helpers/VarList.cpp
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
#include "VarList.hpp"
|
||||||
|
|
||||||
|
CVarList::CVarList(const std::string& in, long unsigned int lastArgNo, const char separator) {
|
||||||
|
std::string curitem = "";
|
||||||
|
std::string argZ = in;
|
||||||
|
const bool SPACESEP = separator == 's';
|
||||||
|
|
||||||
|
auto nextItem = [&]() {
|
||||||
|
auto idx = lastArgNo != 0 && m_vArgs.size() >= lastArgNo - 1 ? std::string::npos : ([&]() -> size_t {
|
||||||
|
if (!SPACESEP)
|
||||||
|
return argZ.find_first_of(separator);
|
||||||
|
|
||||||
|
uint64_t pos = -1;
|
||||||
|
while (!std::isspace(argZ[++pos]) && pos < argZ.length())
|
||||||
|
;
|
||||||
|
|
||||||
|
return pos < argZ.length() ? pos : std::string::npos;
|
||||||
|
}());
|
||||||
|
|
||||||
|
if (idx != std::string::npos) {
|
||||||
|
curitem = argZ.substr(0, idx);
|
||||||
|
argZ = argZ.substr(idx + 1);
|
||||||
|
} else {
|
||||||
|
curitem = argZ;
|
||||||
|
argZ = STRVAL_EMPTY;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
nextItem();
|
||||||
|
|
||||||
|
while (curitem != STRVAL_EMPTY) {
|
||||||
|
m_vArgs.push_back(removeBeginEndSpacesTabs(curitem));
|
||||||
|
nextItem();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string CVarList::join(const std::string& joiner, size_t from, size_t to) const {
|
||||||
|
size_t last = to == 0 ? size() : to;
|
||||||
|
|
||||||
|
std::string rolling;
|
||||||
|
for (size_t i = from; i < last; ++i) {
|
||||||
|
rolling += m_vArgs[i] + (i + 1 < last ? joiner : "");
|
||||||
|
}
|
||||||
|
|
||||||
|
return rolling;
|
||||||
|
}
|
41
src/helpers/VarList.hpp
Normal file
41
src/helpers/VarList.hpp
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
#pragma once
|
||||||
|
#include <vector>
|
||||||
|
#include <string>
|
||||||
|
#include "../macros.hpp"
|
||||||
|
|
||||||
|
class CVarList {
|
||||||
|
public:
|
||||||
|
/* passing 's' as a separator will use std::isspace */
|
||||||
|
CVarList(const std::string& in, long unsigned int lastArgNo = 0, const char separator = ',');
|
||||||
|
|
||||||
|
~CVarList() = default;
|
||||||
|
|
||||||
|
size_t size() const {
|
||||||
|
return m_vArgs.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string join(const std::string& joiner, size_t from = 0, size_t to = 0) const;
|
||||||
|
|
||||||
|
std::string operator[](const long unsigned int& idx) const {
|
||||||
|
if (idx >= m_vArgs.size())
|
||||||
|
return "";
|
||||||
|
return m_vArgs[idx];
|
||||||
|
}
|
||||||
|
|
||||||
|
// for range-based loops
|
||||||
|
std::vector<std::string>::iterator begin() {
|
||||||
|
return m_vArgs.begin();
|
||||||
|
}
|
||||||
|
std::vector<std::string>::const_iterator begin() const {
|
||||||
|
return m_vArgs.begin();
|
||||||
|
}
|
||||||
|
std::vector<std::string>::iterator end() {
|
||||||
|
return m_vArgs.end();
|
||||||
|
}
|
||||||
|
std::vector<std::string>::const_iterator end() const {
|
||||||
|
return m_vArgs.end();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::vector<std::string> m_vArgs;
|
||||||
|
};
|
|
@ -37,6 +37,8 @@
|
||||||
|
|
||||||
#define PI 3.14159265358979
|
#define PI 3.14159265358979
|
||||||
|
|
||||||
|
#define STRVAL_EMPTY "[[EMPTY]]"
|
||||||
|
|
||||||
#define LISTENER(name) \
|
#define LISTENER(name) \
|
||||||
void listener_##name(wl_listener*, void*); \
|
void listener_##name(wl_listener*, void*); \
|
||||||
inline wl_listener listen_##name = {.notify = listener_##name}
|
inline wl_listener listen_##name = {.notify = listener_##name}
|
||||||
|
|
Loading…
Reference in a new issue