aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/helpers
diff options
context:
space:
mode:
authorvaxerski <[email protected]>2023-09-12 16:46:22 +0100
committervaxerski <[email protected]>2023-09-12 16:50:10 +0100
commit2e34548aea5b4a0e131a365693227f8739c0af6d (patch)
tree755006c60ef5120a067715d45040406a33511815 /src/helpers
parent5cc53c14d9d904fe9b97e72ed974bbea9d68eb64 (diff)
downloadHyprland-2e34548aea5b4a0e131a365693227f8739c0af6d.tar.gz
Hyprland-2e34548aea5b4a0e131a365693227f8739c0af6d.zip
varlist: move to a separate header, add join
Diffstat (limited to 'src/helpers')
-rw-r--r--src/helpers/VarList.cpp46
-rw-r--r--src/helpers/VarList.hpp41
2 files changed, 87 insertions, 0 deletions
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