aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/config/ConfigManager.hpp70
-rw-r--r--src/helpers/VarList.cpp46
-rw-r--r--src/helpers/VarList.hpp41
-rw-r--r--src/macros.hpp2
4 files changed, 90 insertions, 69 deletions
diff --git a/src/config/ConfigManager.hpp b/src/config/ConfigManager.hpp
index 8586ec89..3d545bc4 100644
--- a/src/config/ConfigManager.hpp
+++ b/src/config/ConfigManager.hpp
@@ -15,12 +15,11 @@
#include "../Window.hpp"
#include "../helpers/WLClasses.hpp"
#include "../helpers/Monitor.hpp"
+#include "../helpers/VarList.hpp"
#include "defaultConfig.hpp"
#include "ConfigDataValues.hpp"
-#define STRVAL_EMPTY "[[EMPTY]]"
-
#define INITANIMCFG(name) animationConfig[name] = {}
#define CREATEANIMCFG(name, parent) animationConfig[name] = {false, "", "", 0.f, -1, &animationConfig["global"], &animationConfig[parent]}
@@ -75,73 +74,6 @@ struct SExecRequestedRule {
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 {
public:
CConfigManager();
diff --git a/src/helpers/VarList.cpp b/src/helpers/VarList.cpp
new file mode 100644
index 00000000..0da86e15
--- /dev/null
+++ b/src/helpers/VarList.cpp
@@ -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;
+} \ No newline at end of file
diff --git a/src/helpers/VarList.hpp b/src/helpers/VarList.hpp
new file mode 100644
index 00000000..0c83a3db
--- /dev/null
+++ b/src/helpers/VarList.hpp
@@ -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;
+}; \ No newline at end of file
diff --git a/src/macros.hpp b/src/macros.hpp
index 53f77fdf..3f0a9ebc 100644
--- a/src/macros.hpp
+++ b/src/macros.hpp
@@ -37,6 +37,8 @@
#define PI 3.14159265358979
+#define STRVAL_EMPTY "[[EMPTY]]"
+
#define LISTENER(name) \
void listener_##name(wl_listener*, void*); \
inline wl_listener listen_##name = {.notify = listener_##name}