Extend usage for cm::string_view for more flexibility

This commit is contained in:
Marc Chevrier
2025-10-06 14:47:22 +02:00
parent 34b7e7ac64
commit ab60f1a010
8 changed files with 39 additions and 32 deletions

View File

@@ -166,7 +166,7 @@ std::string cmGeneratorExpression::StripEmptyListElements(
} }
static std::string extractAllGeneratorExpressions( static std::string extractAllGeneratorExpressions(
std::string const& input, cm::string_view input,
std::map<std::string, std::vector<std::string>>* collected) std::map<std::string, std::vector<std::string>>* collected)
{ {
std::string result; std::string result;
@@ -176,9 +176,9 @@ static std::string extractAllGeneratorExpressions(
std::stack<char const*> colons; // indices of ":" std::stack<char const*> colons; // indices of ":"
while ((pos = input.find("$<", lastPos)) != std::string::npos) { while ((pos = input.find("$<", lastPos)) != std::string::npos) {
result += input.substr(lastPos, pos - lastPos); result += input.substr(lastPos, pos - lastPos);
starts.push(input.c_str() + pos); starts.push(input.data() + pos);
pos += 2; pos += 2;
char const* c = input.c_str() + pos; char const* c = input.data() + pos;
char const* const cStart = c; char const* const cStart = c;
for (; *c; ++c) { for (; *c; ++c) {
if (cmGeneratorExpression::StartsWithGeneratorExpression(c)) { if (cmGeneratorExpression::StartsWithGeneratorExpression(c)) {
@@ -209,7 +209,7 @@ static std::string extractAllGeneratorExpressions(
} }
std::string::size_type const traversed = (c - cStart) + 1; std::string::size_type const traversed = (c - cStart) + 1;
if (!*c) { if (!*c) {
result += "$<" + input.substr(pos, traversed); result += cmStrCat("$<", input.substr(pos, traversed));
} }
pos += traversed; pos += traversed;
lastPos = pos; lastPos = pos;
@@ -220,7 +220,7 @@ static std::string extractAllGeneratorExpressions(
return cmGeneratorExpression::StripEmptyListElements(result); return cmGeneratorExpression::StripEmptyListElements(result);
} }
static std::string stripAllGeneratorExpressions(std::string const& input) static std::string stripAllGeneratorExpressions(cm::string_view input)
{ {
return extractAllGeneratorExpressions(input, nullptr); return extractAllGeneratorExpressions(input, nullptr);
} }
@@ -243,7 +243,7 @@ static void prefixItems(std::string const& content, std::string& result,
} }
static std::string stripExportInterface( static std::string stripExportInterface(
std::string const& input, cmGeneratorExpression::PreprocessContext context, cm::string_view input, cmGeneratorExpression::PreprocessContext context,
cm::string_view importPrefix) cm::string_view importPrefix)
{ {
std::string result; std::string result;
@@ -282,7 +282,7 @@ static std::string stripExportInterface(
assert(false && "Invalid position found"); assert(false && "Invalid position found");
} }
nestingLevel = 1; nestingLevel = 1;
char const* c = input.c_str() + pos; char const* c = input.data() + pos;
char const* const cStart = c; char const* const cStart = c;
for (; *c; ++c) { for (; *c; ++c) {
if (cmGeneratorExpression::StartsWithGeneratorExpression(c)) { if (cmGeneratorExpression::StartsWithGeneratorExpression(c)) {
@@ -300,7 +300,8 @@ static std::string stripExportInterface(
result += input.substr(pos, c - cStart); result += input.substr(pos, c - cStart);
} else if (context == cmGeneratorExpression::InstallInterface && } else if (context == cmGeneratorExpression::InstallInterface &&
foundGenex == FoundGenex::InstallInterface) { foundGenex == FoundGenex::InstallInterface) {
std::string const content = input.substr(pos, c - cStart); std::string const content =
static_cast<std::string>(input.substr(pos, c - cStart));
if (!importPrefix.empty()) { if (!importPrefix.empty()) {
prefixItems(content, result, importPrefix); prefixItems(content, result, importPrefix);
} else { } else {
@@ -390,7 +391,7 @@ void cmGeneratorExpression::Split(std::string const& input,
} }
} }
std::string cmGeneratorExpression::Preprocess(std::string const& input, std::string cmGeneratorExpression::Preprocess(cm::string_view input,
PreprocessContext context, PreprocessContext context,
cm::string_view importPrefix) cm::string_view importPrefix)
{ {

View File

@@ -65,7 +65,7 @@ public:
InstallInterface InstallInterface
}; };
static std::string Preprocess(std::string const& input, static std::string Preprocess(cm::string_view input,
PreprocessContext context, PreprocessContext context,
cm::string_view importPrefix = {}); cm::string_view importPrefix = {});

View File

@@ -20,8 +20,7 @@ cmStringReplaceHelper::cmStringReplaceHelper(std::string const& regex,
this->ParseReplaceExpression(); this->ParseReplaceExpression();
} }
bool cmStringReplaceHelper::Replace(std::string const& input, bool cmStringReplaceHelper::Replace(cm::string_view input, std::string& output)
std::string& output)
{ {
output.clear(); output.clear();
@@ -36,7 +35,7 @@ bool cmStringReplaceHelper::Replace(std::string const& input,
auto& re = this->RegularExpression; auto& re = this->RegularExpression;
std::string::size_type base = 0; std::string::size_type base = 0;
unsigned optNonEmpty = 0; unsigned optNonEmpty = 0;
while (re.find(input, base, optAnchor | optNonEmpty)) { while (re.find(input.data(), base, optAnchor | optNonEmpty)) {
if (this->Makefile) { if (this->Makefile) {
this->Makefile->ClearMatches(); this->Makefile->ClearMatches();
this->Makefile->StoreMatches(re); this->Makefile->StoreMatches(re);

View File

@@ -6,6 +6,8 @@
#include <utility> #include <utility>
#include <vector> #include <vector>
#include <cm/string_view>
#include "cmsys/RegularExpression.hxx" #include "cmsys/RegularExpression.hxx"
class cmMakefile; class cmMakefile;
@@ -25,7 +27,7 @@ public:
return this->ValidReplaceExpression; return this->ValidReplaceExpression;
} }
bool Replace(std::string const& input, std::string& output); bool Replace(cm::string_view input, std::string& output);
std::string const& GetError() { return this->ErrorString; } std::string const& GetError() { return this->ErrorString; }

View File

@@ -36,7 +36,7 @@
#include "cmStringAlgorithms.h" #include "cmStringAlgorithms.h"
#include "cmSystemTools.h" #include "cmSystemTools.h"
std::string cmTimestamp::CurrentTime(std::string const& formatString, std::string cmTimestamp::CurrentTime(cm::string_view formatString,
bool utcFlag) const bool utcFlag) const
{ {
// get current time with microsecond resolution // get current time with microsecond resolution
@@ -63,11 +63,12 @@ std::string cmTimestamp::CurrentTime(std::string const& formatString,
} }
return this->CreateTimestampFromTimeT(currentTimeT, microseconds, return this->CreateTimestampFromTimeT(currentTimeT, microseconds,
formatString, utcFlag); static_cast<std::string>(formatString),
utcFlag);
} }
std::string cmTimestamp::FileModificationTime(char const* path, std::string cmTimestamp::FileModificationTime(char const* path,
std::string const& formatString, cm::string_view formatString,
bool utcFlag) const bool utcFlag) const
{ {
std::string real_path = std::string real_path =
@@ -89,8 +90,8 @@ std::string cmTimestamp::FileModificationTime(char const* path,
} }
uv_fs_req_cleanup(&req); uv_fs_req_cleanup(&req);
return this->CreateTimestampFromTimeT(mtime, microseconds, formatString, return this->CreateTimestampFromTimeT(
utcFlag); mtime, microseconds, static_cast<std::string>(formatString), utcFlag);
} }
std::string cmTimestamp::CreateTimestampFromTimeT(time_t timeT, std::string cmTimestamp::CreateTimestampFromTimeT(time_t timeT,

View File

@@ -8,6 +8,8 @@
#include <ctime> #include <ctime>
#include <string> #include <string>
#include <cm/string_view>
/** \class cmTimestamp /** \class cmTimestamp
* \brief Utility class to generate string representation of a timestamp * \brief Utility class to generate string representation of a timestamp
* *
@@ -15,10 +17,10 @@
class cmTimestamp class cmTimestamp
{ {
public: public:
std::string CurrentTime(std::string const& formatString, bool utcFlag) const; std::string CurrentTime(cm::string_view formatString, bool utcFlag) const;
std::string FileModificationTime(char const* path, std::string FileModificationTime(char const* path,
std::string const& formatString, cm::string_view formatString,
bool utcFlag) const; bool utcFlag) const;
std::string CreateTimestampFromTimeT(time_t timeT, std::string formatString, std::string CreateTimestampFromTimeT(time_t timeT, std::string formatString,

View File

@@ -10,7 +10,7 @@
static std::array<int, 5> const kUuidGroups = { { 4, 2, 2, 2, 6 } }; static std::array<int, 5> const kUuidGroups = { { 4, 2, 2, 2, 6 } };
std::string cmUuid::FromMd5(std::vector<unsigned char> const& uuidNamespace, std::string cmUuid::FromMd5(std::vector<unsigned char> const& uuidNamespace,
std::string const& name) const cm::string_view name) const
{ {
std::vector<unsigned char> hashInput; std::vector<unsigned char> hashInput;
this->CreateHashInput(uuidNamespace, name, hashInput); this->CreateHashInput(uuidNamespace, name, hashInput);
@@ -24,7 +24,7 @@ std::string cmUuid::FromMd5(std::vector<unsigned char> const& uuidNamespace,
} }
std::string cmUuid::FromSha1(std::vector<unsigned char> const& uuidNamespace, std::string cmUuid::FromSha1(std::vector<unsigned char> const& uuidNamespace,
std::string const& name) const cm::string_view name) const
{ {
std::vector<unsigned char> hashInput; std::vector<unsigned char> hashInput;
this->CreateHashInput(uuidNamespace, name, hashInput); this->CreateHashInput(uuidNamespace, name, hashInput);
@@ -38,7 +38,7 @@ std::string cmUuid::FromSha1(std::vector<unsigned char> const& uuidNamespace,
} }
void cmUuid::CreateHashInput(std::vector<unsigned char> const& uuidNamespace, void cmUuid::CreateHashInput(std::vector<unsigned char> const& uuidNamespace,
std::string const& name, cm::string_view name,
std::vector<unsigned char>& output) const std::vector<unsigned char>& output) const
{ {
output = uuidNamespace; output = uuidNamespace;
@@ -46,7 +46,7 @@ void cmUuid::CreateHashInput(std::vector<unsigned char> const& uuidNamespace,
if (!name.empty()) { if (!name.empty()) {
output.resize(output.size() + name.size()); output.resize(output.size() + name.size());
memcpy(output.data() + uuidNamespace.size(), name.c_str(), name.size()); memcpy(output.data() + uuidNamespace.size(), name.data(), name.size());
} }
} }
@@ -67,7 +67,7 @@ std::string cmUuid::FromDigest(unsigned char const* digest,
return this->BinaryToString(uuid); return this->BinaryToString(uuid);
} }
bool cmUuid::StringToBinary(std::string const& input, bool cmUuid::StringToBinary(cm::string_view input,
std::vector<unsigned char>& output) const std::vector<unsigned char>& output) const
{ {
output.clear(); output.clear();
@@ -126,7 +126,7 @@ std::string cmUuid::ByteToHex(unsigned char inputByte) const
return result; return result;
} }
bool cmUuid::StringToBinaryImpl(std::string const& input, bool cmUuid::StringToBinaryImpl(cm::string_view input,
std::vector<unsigned char>& output) const std::vector<unsigned char>& output) const
{ {
if (input.size() % 2) { if (input.size() % 2) {

View File

@@ -7,6 +7,8 @@
#include <string> #include <string>
#include <vector> #include <vector>
#include <cm/string_view>
/** \class cmUuid /** \class cmUuid
* \brief Utility class to generate UUIDs as defined by RFC4122 * \brief Utility class to generate UUIDs as defined by RFC4122
* *
@@ -15,25 +17,25 @@ class cmUuid
{ {
public: public:
std::string FromMd5(std::vector<unsigned char> const& uuidNamespace, std::string FromMd5(std::vector<unsigned char> const& uuidNamespace,
std::string const& name) const; cm::string_view name) const;
std::string FromSha1(std::vector<unsigned char> const& uuidNamespace, std::string FromSha1(std::vector<unsigned char> const& uuidNamespace,
std::string const& name) const; cm::string_view name) const;
bool StringToBinary(std::string const& input, bool StringToBinary(cm::string_view input,
std::vector<unsigned char>& output) const; std::vector<unsigned char>& output) const;
private: private:
std::string ByteToHex(unsigned char byte) const; std::string ByteToHex(unsigned char byte) const;
void CreateHashInput(std::vector<unsigned char> const& uuidNamespace, void CreateHashInput(std::vector<unsigned char> const& uuidNamespace,
std::string const& name, cm::string_view name,
std::vector<unsigned char>& output) const; std::vector<unsigned char>& output) const;
std::string FromDigest(unsigned char const* digest, std::string FromDigest(unsigned char const* digest,
unsigned char version) const; unsigned char version) const;
bool StringToBinaryImpl(std::string const& input, bool StringToBinaryImpl(cm::string_view input,
std::vector<unsigned char>& output) const; std::vector<unsigned char>& output) const;
std::string BinaryToString(unsigned char const* input) const; std::string BinaryToString(unsigned char const* input) const;