Make Path use StringRef instead of std::string where possible.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@91620 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/System/Path.cpp b/lib/System/Path.cpp
index 8e1fa53..6844530 100644
--- a/lib/System/Path.cpp
+++ b/lib/System/Path.cpp
@@ -176,7 +176,7 @@
return sys::Path();
}
-std::string Path::GetDLLSuffix() {
+StringRef Path::GetDLLSuffix() {
return LTDL_SHLIB_EXT;
}
@@ -191,7 +191,7 @@
return FT == Bitcode_FileType;
}
-bool Path::hasMagicNumber(const std::string &Magic) const {
+bool Path::hasMagicNumber(StringRef Magic) const {
std::string actualMagic;
if (getMagicNumber(actualMagic, static_cast<unsigned>(Magic.size())))
return Magic == actualMagic;
@@ -217,8 +217,9 @@
Paths.push_back(tmpPath);
}
-static std::string getDirnameCharSep(const std::string& path, char Sep) {
-
+static StringRef getDirnameCharSep(StringRef path, const char *Sep) {
+ assert(Sep[0] != '\0' && Sep[1] == '\0' &&
+ "Sep must be a 1-character string literal.");
if (path.empty())
return ".";
@@ -227,31 +228,31 @@
signed pos = static_cast<signed>(path.size()) - 1;
- while (pos >= 0 && path[pos] == Sep)
+ while (pos >= 0 && path[pos] == Sep[0])
--pos;
if (pos < 0)
- return path[0] == Sep ? std::string(1, Sep) : std::string(".");
+ return path[0] == Sep[0] ? Sep : ".";
// Any slashes left?
signed i = 0;
- while (i < pos && path[i] != Sep)
+ while (i < pos && path[i] != Sep[0])
++i;
if (i == pos) // No slashes? Return "."
return ".";
// There is at least one slash left. Remove all trailing non-slashes.
- while (pos >= 0 && path[pos] != Sep)
+ while (pos >= 0 && path[pos] != Sep[0])
--pos;
// Remove any trailing slashes.
- while (pos >= 0 && path[pos] == Sep)
+ while (pos >= 0 && path[pos] == Sep[0])
--pos;
if (pos < 0)
- return path[0] == Sep ? std::string(1, Sep) : std::string(".");
+ return path[0] == Sep[0] ? Sep : ".";
return path.substr(0, pos+1);
}
diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc
index 2074217..a99720c 100644
--- a/lib/System/Unix/Path.inc
+++ b/lib/System/Unix/Path.inc
@@ -78,15 +78,15 @@
const char sys::PathSeparator = ':';
-Path::Path(const std::string& p)
+Path::Path(StringRef p)
: path(p) {}
Path::Path(const char *StrStart, unsigned StrLen)
: path(StrStart, StrLen) {}
Path&
-Path::operator=(const std::string &that) {
- path = that;
+Path::operator=(StringRef that) {
+ path.assign(that.data(), that.size());
return *this;
}
@@ -377,11 +377,11 @@
}
-std::string Path::getDirname() const {
- return getDirnameCharSep(path, '/');
+StringRef Path::getDirname() const {
+ return getDirnameCharSep(path, "/");
}
-std::string
+StringRef
Path::getBasename() const {
// Find the last slash
std::string::size_type slash = path.rfind('/');
@@ -392,12 +392,12 @@
std::string::size_type dot = path.rfind('.');
if (dot == std::string::npos || dot < slash)
- return path.substr(slash);
+ return StringRef(path).substr(slash);
else
- return path.substr(slash, dot - slash);
+ return StringRef(path).substr(slash, dot - slash);
}
-std::string
+StringRef
Path::getSuffix() const {
// Find the last slash
std::string::size_type slash = path.rfind('/');
@@ -408,9 +408,9 @@
std::string::size_type dot = path.rfind('.');
if (dot == std::string::npos || dot < slash)
- return std::string();
+ return StringRef("");
else
- return path.substr(dot + 1);
+ return StringRef(path).substr(dot + 1);
}
bool Path::getMagicNumber(std::string &Magic, unsigned len) const {
@@ -478,7 +478,7 @@
return true;
}
-std::string
+StringRef
Path::getLast() const {
// Find the last slash
size_t pos = path.rfind('/');
@@ -492,12 +492,12 @@
// Find the second to last slash
size_t pos2 = path.rfind('/', pos-1);
if (pos2 == std::string::npos)
- return path.substr(0,pos);
+ return StringRef(path).substr(0,pos);
else
- return path.substr(pos2+1,pos-pos2-1);
+ return StringRef(path).substr(pos2+1,pos-pos2-1);
}
// Return everything after the last slash
- return path.substr(pos+1);
+ return StringRef(path).substr(pos+1);
}
const FileStatus *
@@ -589,7 +589,7 @@
}
bool
-Path::set(const std::string& a_path) {
+Path::set(StringRef a_path) {
if (a_path.empty())
return false;
std::string save(path);
@@ -602,7 +602,7 @@
}
bool
-Path::appendComponent(const std::string& name) {
+Path::appendComponent(StringRef name) {
if (name.empty())
return false;
std::string save(path);
@@ -634,7 +634,7 @@
}
bool
-Path::appendSuffix(const std::string& suffix) {
+Path::appendSuffix(StringRef suffix) {
std::string save(path);
path.append(".");
path.append(suffix);
diff --git a/lib/System/Win32/Path.inc b/lib/System/Win32/Path.inc
index 634fbc7..55b4376 100644
--- a/lib/System/Win32/Path.inc
+++ b/lib/System/Win32/Path.inc
@@ -58,8 +58,8 @@
}
Path&
-Path::operator=(const std::string &that) {
- path = that;
+Path::operator=(StringRef that) {
+ path.assign(that.data(), that.size());
FlipBackSlashes(path);
return *this;
}
@@ -287,11 +287,11 @@
return len > 0 && path[len-1] == '/';
}
-std::string Path::getDirname() const {
- return getDirnameCharSep(path, '/');
+StringRef Path::getDirname() const {
+ return getDirnameCharSep(path, "/");
}
-std::string
+StringRef
Path::getBasename() const {
// Find the last slash
size_t slash = path.rfind('/');
@@ -302,12 +302,12 @@
size_t dot = path.rfind('.');
if (dot == std::string::npos || dot < slash)
- return path.substr(slash);
+ return StringRef(path).substr(slash);
else
- return path.substr(slash, dot - slash);
+ return StringRef(path).substr(slash, dot - slash);
}
-std::string
+StringRef
Path::getSuffix() const {
// Find the last slash
size_t slash = path.rfind('/');
@@ -318,9 +318,9 @@
size_t dot = path.rfind('.');
if (dot == std::string::npos || dot < slash)
- return std::string();
+ return StringRef("");
else
- return path.substr(dot + 1);
+ return StringRef(path).substr(dot + 1);
}
bool
@@ -364,7 +364,7 @@
return true;
}
-std::string
+StringRef
Path::getLast() const {
// Find the last slash
size_t pos = path.rfind('/');
@@ -378,7 +378,7 @@
return path;
// Return everything after the last slash
- return path.substr(pos+1);
+ return StringRef(path).substr(pos+1);
}
const FileStatus *
@@ -490,7 +490,7 @@
}
bool
-Path::set(const std::string& a_path) {
+Path::set(StringRef a_path) {
if (a_path.empty())
return false;
std::string save(path);
@@ -504,7 +504,7 @@
}
bool
-Path::appendComponent(const std::string& name) {
+Path::appendComponent(StringRef name) {
if (name.empty())
return false;
std::string save(path);
@@ -536,7 +536,7 @@
}
bool
-Path::appendSuffix(const std::string& suffix) {
+Path::appendSuffix(StringRef suffix) {
std::string save(path);
path.append(".");
path.append(suffix);