aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
authorpennae <github@quasiparticle.net>2022-01-21 14:44:00 +0100
committerpennae <github@quasiparticle.net>2022-01-27 17:15:43 +0100
commit41d70a2fc8d243d8c83ecc1c9ba648b625957437 (patch)
treea85c0c1971926fd8cf645f4ccf13547e2576a677 /src/libstore
parent0d7fae6a574ec1b6758a7e6d8e639145c1c465a9 (diff)
return string_views from forceString*
once a string has been forced we already have dynamic storage allocated for it, so we can easily reuse that storage instead of copying.
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/derivations.cc4
-rw-r--r--src/libstore/derivations.hh2
-rw-r--r--src/libstore/names.cc24
-rw-r--r--src/libstore/names.hh6
4 files changed, 18 insertions, 18 deletions
diff --git a/src/libstore/derivations.cc b/src/libstore/derivations.cc
index 3e3d50144..40af6a775 100644
--- a/src/libstore/derivations.cc
+++ b/src/libstore/derivations.cc
@@ -699,10 +699,10 @@ void writeDerivation(Sink & out, const Store & store, const BasicDerivation & dr
}
-std::string hashPlaceholder(const std::string & outputName)
+std::string hashPlaceholder(const std::string_view outputName)
{
// FIXME: memoize?
- return "/" + hashString(htSHA256, "nix-output:" + outputName).to_string(Base32, false);
+ return "/" + hashString(htSHA256, concatStrings("nix-output:", outputName)).to_string(Base32, false);
}
std::string downstreamPlaceholder(const Store & store, const StorePath & drvPath, std::string_view outputName)
diff --git a/src/libstore/derivations.hh b/src/libstore/derivations.hh
index b1cb68194..a644cec60 100644
--- a/src/libstore/derivations.hh
+++ b/src/libstore/derivations.hh
@@ -236,7 +236,7 @@ void writeDerivation(Sink & out, const Store & store, const BasicDerivation & dr
It is used as a placeholder to allow derivations to refer to their
own outputs without needing to use the hash of a derivation in
itself, making the hash near-impossible to calculate. */
-std::string hashPlaceholder(const std::string & outputName);
+std::string hashPlaceholder(const std::string_view outputName);
/* This creates an opaque and almost certainly unique string
deterministically from a derivation path and output name.
diff --git a/src/libstore/names.cc b/src/libstore/names.cc
index 54c95055d..277aabf0f 100644
--- a/src/libstore/names.cc
+++ b/src/libstore/names.cc
@@ -56,8 +56,8 @@ bool DrvName::matches(const DrvName & n)
}
-string nextComponent(string::const_iterator & p,
- const string::const_iterator end)
+std::string_view nextComponent(std::string_view::const_iterator & p,
+ const std::string_view::const_iterator end)
{
/* Skip any dots and dashes (component separators). */
while (p != end && (*p == '.' || *p == '-')) ++p;
@@ -67,18 +67,18 @@ string nextComponent(string::const_iterator & p,
/* If the first character is a digit, consume the longest sequence
of digits. Otherwise, consume the longest sequence of
non-digit, non-separator characters. */
- string s;
+ auto s = p;
if (isdigit(*p))
- while (p != end && isdigit(*p)) s += *p++;
+ while (p != end && isdigit(*p)) p++;
else
while (p != end && (!isdigit(*p) && *p != '.' && *p != '-'))
- s += *p++;
+ p++;
- return s;
+ return {s, size_t(p - s)};
}
-static bool componentsLT(const string & c1, const string & c2)
+static bool componentsLT(const std::string_view c1, const std::string_view c2)
{
auto n1 = string2Int<int>(c1);
auto n2 = string2Int<int>(c2);
@@ -94,14 +94,14 @@ static bool componentsLT(const string & c1, const string & c2)
}
-int compareVersions(const string & v1, const string & v2)
+int compareVersions(const std::string_view v1, const std::string_view v2)
{
- string::const_iterator p1 = v1.begin();
- string::const_iterator p2 = v2.begin();
+ auto p1 = v1.begin();
+ auto p2 = v2.begin();
while (p1 != v1.end() || p2 != v2.end()) {
- string c1 = nextComponent(p1, v1.end());
- string c2 = nextComponent(p2, v2.end());
+ auto c1 = nextComponent(p1, v1.end());
+ auto c2 = nextComponent(p2, v2.end());
if (componentsLT(c1, c2)) return -1;
else if (componentsLT(c2, c1)) return 1;
}
diff --git a/src/libstore/names.hh b/src/libstore/names.hh
index 3f861bc44..6f01fe2a1 100644
--- a/src/libstore/names.hh
+++ b/src/libstore/names.hh
@@ -27,9 +27,9 @@ private:
typedef list<DrvName> DrvNames;
-string nextComponent(string::const_iterator & p,
- const string::const_iterator end);
-int compareVersions(const string & v1, const string & v2);
+std::string_view nextComponent(std::string_view::const_iterator & p,
+ const std::string_view::const_iterator end);
+int compareVersions(const std::string_view v1, const std::string_view v2);
DrvNames drvNamesFromArgs(const Strings & opArgs);
}