2016-05-31 03:58:58 +00:00
|
|
|
#pragma once
|
2016-05-19 14:41:06 +00:00
|
|
|
|
2016-06-15 03:32:35 +00:00
|
|
|
#include <sstream>
|
2017-01-13 10:09:56 +00:00
|
|
|
#include <cstring>
|
2016-05-19 14:41:06 +00:00
|
|
|
|
2016-06-15 03:32:35 +00:00
|
|
|
#include "common.hpp"
|
2016-05-19 14:41:06 +00:00
|
|
|
|
2016-11-19 05:22:44 +00:00
|
|
|
POLYBAR_NS
|
2016-05-19 14:41:06 +00:00
|
|
|
|
2017-01-13 10:09:56 +00:00
|
|
|
namespace {
|
|
|
|
/**
|
|
|
|
* Overload that allows sub-string removal at the end of given string
|
|
|
|
*/
|
|
|
|
inline string& operator-(string& a, const string& b) {
|
|
|
|
if (a.size() >= b.size() && a.substr(a.size() - b.size()) == b) {
|
|
|
|
return a.erase(a.size() - b.size());
|
|
|
|
} else {
|
|
|
|
return a;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Overload that allows sub-string removal at the end of given string
|
|
|
|
*/
|
|
|
|
inline void operator-=(string& a, const string& b) {
|
|
|
|
if (a.size() >= b.size() && a.substr(a.size() - b.size()) == b) {
|
|
|
|
a.erase(a.size() - b.size());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2017-01-13 12:51:16 +00:00
|
|
|
class sstream {
|
2017-01-13 10:09:56 +00:00
|
|
|
public:
|
2017-01-13 12:51:16 +00:00
|
|
|
sstream() : m_stream() {}
|
2017-01-13 10:09:56 +00:00
|
|
|
|
|
|
|
template <typename T>
|
2017-01-13 12:51:16 +00:00
|
|
|
sstream& operator<<(const T& object) {
|
2017-01-13 10:09:56 +00:00
|
|
|
m_stream << object;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
2017-01-13 12:51:16 +00:00
|
|
|
sstream& operator<<(const char* cz) {
|
2017-01-13 10:09:56 +00:00
|
|
|
m_stream << cz;
|
|
|
|
return *this;
|
|
|
|
}
|
|
|
|
|
|
|
|
operator string() const {
|
|
|
|
return m_stream.str();
|
|
|
|
}
|
|
|
|
|
|
|
|
const string to_string() const {
|
|
|
|
return m_stream.str();
|
|
|
|
}
|
|
|
|
|
|
|
|
private:
|
|
|
|
std::stringstream m_stream;
|
|
|
|
};
|
|
|
|
|
2016-06-15 03:32:35 +00:00
|
|
|
namespace string_util {
|
2016-10-29 04:48:51 +00:00
|
|
|
/**
|
|
|
|
* Hash type
|
|
|
|
*/
|
|
|
|
using hash_type = unsigned long;
|
|
|
|
|
2016-11-02 19:22:45 +00:00
|
|
|
bool contains(const string& haystack, const string& needle);
|
|
|
|
string upper(const string& s);
|
|
|
|
string lower(const string& s);
|
|
|
|
bool compare(const string& s1, const string& s2);
|
2017-01-12 19:28:44 +00:00
|
|
|
|
2016-12-23 04:18:58 +00:00
|
|
|
string replace(const string& haystack, const string& needle, const string& replacement, size_t start = 0,
|
2016-12-04 03:03:17 +00:00
|
|
|
size_t end = string::npos);
|
2016-12-23 04:18:58 +00:00
|
|
|
string replace_all(const string& haystack, const string& needle, const string& replacement, size_t start = 0,
|
2016-12-04 03:03:17 +00:00
|
|
|
size_t end = string::npos);
|
2017-01-12 19:28:44 +00:00
|
|
|
|
2016-11-02 19:22:45 +00:00
|
|
|
string squeeze(const string& haystack, char needle);
|
2017-01-12 19:28:44 +00:00
|
|
|
|
2016-11-02 19:22:45 +00:00
|
|
|
string strip(const string& haystack, char needle);
|
|
|
|
string strip_trailing_newline(const string& haystack);
|
2017-01-12 19:28:44 +00:00
|
|
|
|
2017-01-26 19:10:33 +00:00
|
|
|
string ltrim(string&& value, const char& needle = ' ');
|
|
|
|
string rtrim(string&& value, const char& needle = ' ');
|
|
|
|
string trim(string&& value, const char& needle = ' ');
|
2017-01-12 19:28:44 +00:00
|
|
|
|
2016-11-27 00:32:21 +00:00
|
|
|
string join(const vector<string>& strs, const string& delim);
|
2016-11-25 12:55:15 +00:00
|
|
|
vector<string>& split_into(const string& s, char delim, vector<string>& container);
|
2016-11-02 19:22:45 +00:00
|
|
|
vector<string> split(const string& s, char delim);
|
2017-01-12 19:28:44 +00:00
|
|
|
|
2016-11-25 12:55:15 +00:00
|
|
|
size_t find_nth(const string& haystack, size_t pos, const string& needle, size_t nth);
|
2017-01-12 19:28:44 +00:00
|
|
|
|
|
|
|
string floating_point(double value, size_t precision, bool fixed = false, const string& locale = "");
|
|
|
|
string filesize_mb(unsigned long long kbytes, size_t precision = 0, const string& locale = "");
|
|
|
|
string filesize_gb(unsigned long long kbytes, size_t precision = 0, const string& locale = "");
|
2017-01-24 07:01:04 +00:00
|
|
|
string filesize(unsigned long long kbytes, size_t precision = 0, bool fixed = false, const string& locale = "");
|
2017-01-12 19:28:44 +00:00
|
|
|
|
2016-11-25 12:55:15 +00:00
|
|
|
hash_type hash(const string& src);
|
2016-05-19 14:41:06 +00:00
|
|
|
}
|
2016-06-15 03:32:35 +00:00
|
|
|
|
2016-11-19 05:22:44 +00:00
|
|
|
POLYBAR_NS_END
|