diff options
author | Duncan Sands <baldrick@free.fr> | 2012-02-21 12:00:25 +0000 |
---|---|---|
committer | Duncan Sands <baldrick@free.fr> | 2012-02-21 12:00:25 +0000 |
commit | 8570b29dfe621b72f7981b5abd7fa21d70864b73 (patch) | |
tree | 398131a77546b0e5d76dae4ce1449aea525112ee /llvm/lib/Support/StringRef.cpp | |
parent | c664fdbd4a9115988e79b27886fc8a6bff110d42 (diff) | |
download | bcm5719-llvm-8570b29dfe621b72f7981b5abd7fa21d70864b73.tar.gz bcm5719-llvm-8570b29dfe621b72f7981b5abd7fa21d70864b73.zip |
Move the implementation of StringRef::split out of StringExtras.cpp
and into StringRef.cpp, which is where the other StringRef stuff is.
llvm-svn: 151054
Diffstat (limited to 'llvm/lib/Support/StringRef.cpp')
-rw-r--r-- | llvm/lib/Support/StringRef.cpp | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/llvm/lib/Support/StringRef.cpp b/llvm/lib/Support/StringRef.cpp index 4d20903e84b..0227b9c2190 100644 --- a/llvm/lib/Support/StringRef.cpp +++ b/llvm/lib/Support/StringRef.cpp @@ -229,6 +229,27 @@ StringRef::size_type StringRef::find_last_of(StringRef Chars, return npos; } +void StringRef::split(SmallVectorImpl<StringRef> &A, + StringRef Separators, int MaxSplit, + bool KeepEmpty) const { + StringRef rest = *this; + + // rest.data() is used to distinguish cases like "a," that splits into + // "a" + "" and "a" that splits into "a" + 0. + for (int splits = 0; + rest.data() != NULL && (MaxSplit < 0 || splits < MaxSplit); + ++splits) { + std::pair<StringRef, StringRef> p = rest.split(Separators); + + if (p.first.size() != 0 || KeepEmpty) + A.push_back(p.first); + rest = p.second; + } + // If we have a tail left, add it. + if (rest.data() != NULL && (rest.size() != 0 || KeepEmpty)) + A.push_back(rest); +} + //===----------------------------------------------------------------------===// // Helpful Algorithms //===----------------------------------------------------------------------===// |