summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-02-06 15:54:43 -0800
committerGitHub <noreply@github.com>2024-02-06 15:54:43 -0800
commitf12977dd8aae5a0a42e65a8e448bca1453f018c6 (patch)
tree15e39cc49d4f940c1cbe320ed54a5f90822095bd /src
parenta238cf95a8ee18e14b30a86097858dff19cf94aa (diff)
downloadbinaryen-f12977dd8aae5a0a42e65a8e448bca1453f018c6.tar.gz
binaryen-f12977dd8aae5a0a42e65a8e448bca1453f018c6.tar.bz2
binaryen-f12977dd8aae5a0a42e65a8e448bca1453f018c6.zip
[NFC] Move code to string.cpp (#6282)
Now that we have a .cpp file, none of the code that was in string.h needs to be in a header any more.
Diffstat (limited to 'src')
-rw-r--r--src/support/string.cpp86
-rw-r--r--src/support/string.h90
2 files changed, 92 insertions, 84 deletions
diff --git a/src/support/string.cpp b/src/support/string.cpp
index c7f8a5ff6..09924849b 100644
--- a/src/support/string.cpp
+++ b/src/support/string.cpp
@@ -20,6 +20,92 @@
namespace wasm::String {
+Split::Split(const std::string& input, const NewLineOr& newLineOrDelim) {
+ auto first = input.find("\n", 0);
+ if (first != std::string::npos && first != input.length() - 1) {
+ split(input, "\n");
+ } else {
+ split(input, newLineOrDelim.delim);
+ }
+}
+
+void Split::split(const std::string& input, const std::string& delim) {
+ size_t lastEnd = 0;
+ while (lastEnd < input.size()) {
+ auto nextDelim = input.find(delim, lastEnd);
+ if (nextDelim == std::string::npos) {
+ nextDelim = input.size();
+ }
+ (*this).push_back(input.substr(lastEnd, nextDelim - lastEnd));
+ lastEnd = nextDelim + delim.size();
+ }
+ needToHandleBracketingOperations = delim != "\n";
+}
+
+Split handleBracketingOperators(Split split) {
+ if (!split.needToHandleBracketingOperations) {
+ return split;
+ }
+
+ Split ret;
+ std::string last;
+ int nesting = 0;
+ auto handlePart = [&](std::string part) {
+ if (part.empty()) {
+ return;
+ }
+ for (const char c : part) {
+ if (c == '(' || c == '<' || c == '[' || c == '{') {
+ nesting++;
+ } else if (c == ')' || c == '>' || c == ']' || c == '}') {
+ nesting--;
+ }
+ }
+ if (last.empty()) {
+ last = part;
+ } else {
+ last += ',' + part;
+ }
+ if (nesting == 0) {
+ ret.push_back(last);
+ last.clear();
+ }
+ };
+ for (auto& part : split) {
+ handlePart(part);
+ }
+ handlePart("");
+ if (nesting != 0) {
+ Fatal() << "Asyncify: failed to parse lists";
+ }
+ return ret;
+}
+
+bool wildcardMatch(const std::string& pattern, const std::string& value) {
+ for (size_t i = 0; i < pattern.size(); i++) {
+ if (pattern[i] == '*') {
+ return wildcardMatch(pattern.substr(i + 1), value.substr(i)) ||
+ (value.size() > 0 &&
+ wildcardMatch(pattern.substr(i), value.substr(i + 1)));
+ }
+ if (i >= value.size()) {
+ return false;
+ }
+ if (pattern[i] != value[i]) {
+ return false;
+ }
+ }
+ return value.size() == pattern.size();
+}
+
+std::string trim(const std::string& input) {
+ size_t size = input.size();
+ while (size > 0 && (isspace(input[size - 1]) || input[size - 1] == '\0')) {
+ size--;
+ }
+ return input.substr(0, size);
+}
+
std::ostream& printEscaped(std::ostream& os, std::string_view str) {
os << '"';
for (unsigned char c : str) {
diff --git a/src/support/string.h b/src/support/string.h
index 6fe3faf60..8ab0ae1a6 100644
--- a/src/support/string.h
+++ b/src/support/string.h
@@ -39,19 +39,8 @@ private:
// "bar".
bool needToHandleBracketingOperations = true;
- void split(const std::string& input, const std::string& delim) {
- size_t lastEnd = 0;
- while (lastEnd < input.size()) {
- auto nextDelim = input.find(delim, lastEnd);
- if (nextDelim == std::string::npos) {
- nextDelim = input.size();
- }
- (*this).push_back(input.substr(lastEnd, nextDelim - lastEnd));
- lastEnd = nextDelim + delim.size();
- }
- needToHandleBracketingOperations = delim != "\n";
- }
- friend String::Split handleBracketingOperators(String::Split split);
+ void split(const std::string& input, const std::string& delim);
+ friend Split handleBracketingOperators(Split split);
public:
// This can be used when we want to split on newlines if there are any, and if
@@ -63,15 +52,7 @@ public:
Split() = default;
- Split(const std::string& input, const NewLineOr& newLineOrDelim) {
- auto first = input.find("\n", 0);
- if (first != std::string::npos && first != input.length() - 1) {
- split(input, "\n");
- } else {
- split(input, newLineOrDelim.delim);
- }
- }
-
+ Split(const std::string& input, const NewLineOr& newLineOrDelim);
Split(const std::string& input, const std::string& delim) {
split(input, delim);
}
@@ -82,72 +63,13 @@ public:
// void foo(int, double)
// must be kept together because of the "(". Likewise, "{", "<", "[" are
// handled.
-inline String::Split handleBracketingOperators(String::Split split) {
- if (!split.needToHandleBracketingOperations) {
- return split;
- }
-
- String::Split ret;
- std::string last;
- int nesting = 0;
- auto handlePart = [&](std::string part) {
- if (part.empty()) {
- return;
- }
- for (const char c : part) {
- if (c == '(' || c == '<' || c == '[' || c == '{') {
- nesting++;
- } else if (c == ')' || c == '>' || c == ']' || c == '}') {
- nesting--;
- }
- }
- if (last.empty()) {
- last = part;
- } else {
- last += ',' + part;
- }
- if (nesting == 0) {
- ret.push_back(last);
- last.clear();
- }
- };
- for (auto& part : split) {
- handlePart(part);
- }
- handlePart("");
- if (nesting != 0) {
- Fatal() << "Asyncify: failed to parse lists";
- }
- return ret;
-}
+Split handleBracketingOperators(Split split);
// Does a simple '*' wildcard match between a pattern and a value.
-inline bool wildcardMatch(const std::string& pattern,
- const std::string& value) {
- for (size_t i = 0; i < pattern.size(); i++) {
- if (pattern[i] == '*') {
- return wildcardMatch(pattern.substr(i + 1), value.substr(i)) ||
- (value.size() > 0 &&
- wildcardMatch(pattern.substr(i), value.substr(i + 1)));
- }
- if (i >= value.size()) {
- return false;
- }
- if (pattern[i] != value[i]) {
- return false;
- }
- }
- return value.size() == pattern.size();
-}
+bool wildcardMatch(const std::string& pattern, const std::string& value);
// Removes any extra whitespace or \0.
-inline std::string trim(const std::string& input) {
- size_t size = input.size();
- while (size > 0 && (isspace(input[size - 1]) || input[size - 1] == '\0')) {
- size--;
- }
- return input.substr(0, size);
-}
+std::string trim(const std::string& input);
inline bool isNumber(const std::string& str) {
return !str.empty() && std::all_of(str.begin(), str.end(), ::isdigit);