Skip to content

Commit 7f1f911

Browse files
grasci-armedriouk
andauthored
Unify functions to strip prefix and suffix (#1266) (#2146)
ExtractPrefix, ExtractSuffix, StripPrefix, StripSuffix methods Same is in TypeScript Replace RemoveSuffixByString with ExtractPrefix Replace RemovePrefixByString with StripPrefix Co-authored-by: Evgueni Driouk <[email protected]>
1 parent 097316d commit 7f1f911

File tree

13 files changed

+149
-62
lines changed

13 files changed

+149
-62
lines changed

libs/rtemodel/include/RteBoard.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -240,7 +240,7 @@ class BoardLessNoCase
240240
{
241241
public:
242242
bool operator()(const std::string& a, const std::string& b) const {
243-
return AlnumCmp::CompareLen(RteUtils::RemovePrefixByString(a, "::"), RteUtils::RemovePrefixByString(b, "::"), false) < 0;
243+
return AlnumCmp::CompareLen(RteUtils::StripPrefix(a, "::"), RteUtils::StripPrefix(b, "::"), false) < 0;
244244
}
245245
};
246246
/**

libs/rtemodel/src/RteItem.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,10 +248,10 @@ void RteItem::SetAttributesFomComponentId(const std::string& componentId)
248248
}
249249
string id = componentId;
250250
if (componentId.find(RteConstants::SUFFIX_CVENDOR) != string::npos) {
251-
string vendor = RteUtils::RemoveSuffixByString(id, RteConstants::SUFFIX_CVENDOR);
251+
string vendor = RteUtils::ExtractPrefix(id, RteConstants::SUFFIX_CVENDOR);
252252
AddAttribute("Cvendor", vendor);
253253
SetAttribute("explicitVendor", true);
254-
id = RteUtils::RemovePrefixByString(componentId, RteConstants::SUFFIX_CVENDOR);
254+
id = RteUtils::StripPrefix(componentId, RteConstants::SUFFIX_CVENDOR);
255255
}
256256
auto explicitVersion = RteUtils::GetSuffix(id, RteConstants::PREFIX_CVERSION_CHAR, true);
257257
AddAttribute("explicitVersion", explicitVersion);

libs/rtemodel/src/RtePackage.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@ string RtePackage::ReleaseIdFromId(const string& id)
209209

210210
string RtePackage::VendorFromId(const string& id)
211211
{
212-
return RteUtils::RemoveSuffixByString(id, RteConstants::SUFFIX_PACK_VENDOR);
212+
return RteUtils::ExtractPrefix(id, RteConstants::SUFFIX_PACK_VENDOR);
213213
}
214214

215215
string RtePackage::NameFromId(const string& id)

libs/rtemodel/src/RteProject.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -840,7 +840,7 @@ bool RteProject::Apply()
840840
ci->AssignAttribute("explicitVersion", *a);
841841
string ymlID = RteUtils::GetPrefix(ci->GetID(), RteConstants::PREFIX_CVERSION_CHAR);
842842
if(!a->GetAttributeAsBool("explicitVendor")) {
843-
ymlID = RteUtils::RemovePrefixByString(ymlID, RteConstants::SUFFIX_CVENDOR);
843+
ymlID = RteUtils::StripPrefix(ymlID, RteConstants::SUFFIX_CVENDOR);
844844
}
845845
ymlID += a->GetAttribute("explicitVersion");
846846
ci->AddAttribute("ymlID", ymlID);

libs/rteutils/include/RteUtils.h

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,35 @@ class RteUtils
5050
*/
5151
static int GetSuffixAsInt(const std::string& s, char delimiter = ':');
5252
/**
53-
* @brief determine string after a delimiter
53+
* @brief Remove string prefix before delimiter
5454
* @param s string containing delimiter
5555
* @param delimiter string delimiter to look for
56-
* @return return string after delimiter
56+
* @return return string after delimiter, entire string if no delimiter found
5757
*/
58-
static std::string RemovePrefixByString(const std::string& s, const char* delimiter = ":");
58+
static std::string StripPrefix(const std::string& s, const char* delimiter = ":");
5959
/**
60-
* @brief determine string ahead of a delimiter
60+
* @brief Remove string suffix after delimiter
6161
* @param s string containing delimiter
6262
* @param delimiter string delimiter to look for
63-
* @return return string ahead of delimiter
63+
* @return return string before of delimiter, entire string if no delimiter found
6464
*/
65-
static std::string RemoveSuffixByString(const std::string& s, const char* delimiter = ":");
65+
static std::string StripSuffix(const std::string& s, const char* delimiter = ":");
66+
/**
67+
* @brief Extract string prefix before delimiter
68+
* @param s string containing delimiter
69+
* @param delimiter string delimiter to look for
70+
* @param withDelimiter true if returned string should contain delimiter, otherwise false
71+
* @return return string after delimiter, empty if no delimiter found
72+
*/
73+
static std::string ExtractPrefix(const std::string& s, const char* delimiter = ":", bool withDelimiter = false);
74+
/**
75+
* @brief Extract string suffix after delimiter
76+
* @param s string containing delimiter
77+
* @param delimiter string delimiter to look for
78+
* @param withDelimiter true if returned string should contain delimiter, otherwise false
79+
* @return return string after delimiter, empty if no delimiter is found,
80+
*/
81+
static std::string ExtractSuffix(const std::string& s, const char* delimiter = ":", bool withDelimiter = false);
6682
/**
6783
* @brief determine number of delimiters found in the string
6884
* @param s string containing delimiter(s)

libs/rteutils/src/RteUtils.cpp

Lines changed: 43 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -69,34 +69,62 @@ int RteUtils::GetSuffixAsInt(const string& value, char delimiter)
6969
return stoi(s);
7070
}
7171

72-
string RteUtils::RemovePrefixByString(const string& s, const char* delimiter)
72+
string RteUtils::StripPrefix(const string& s, const char* delimiter)
7373
{
74+
if(!delimiter) {
75+
return s;
76+
}
7477
size_t len = strlen(delimiter);
7578
string::size_type pos = s.find(delimiter);
76-
if (pos == string::npos)
79+
if(pos == string::npos) {
7780
return s;
78-
81+
}
7982
return s.substr(pos + len);
8083
}
8184

82-
string RteUtils::RemoveSuffixByString(const string& s, const char* delimiter)
85+
string RteUtils::StripSuffix(const string& s, const char* delimiter)
8386
{
84-
const char* cpos = strstr(s.c_str(), delimiter);
85-
const char* pos;
86-
if (cpos == 0) {
87+
if(!delimiter) {
88+
return s;
89+
}
90+
string::size_type pos = s.find(delimiter);
91+
if(pos == string::npos) {
92+
return s;
93+
}
94+
return s.substr(0, pos);
95+
}
96+
97+
string RteUtils::ExtractPrefix(const string& s, const char* delimiter, bool withDelimiter)
98+
{
99+
if(!delimiter) {
87100
return EMPTY_STRING;
88101
}
89-
do {
90-
pos = cpos;
91-
cpos = strstr(cpos + 1, delimiter);
92-
} while (cpos);
93-
size_t cnt = pos - s.c_str();
94-
if(cnt > 0 ) {
95-
return s.substr(0, cnt);
102+
string::size_type pos = s.find(delimiter);
103+
if(pos == string::npos) {
104+
return EMPTY_STRING;
105+
}
106+
if(withDelimiter) {
107+
pos += strlen(delimiter);
108+
}
109+
return s.substr(0, pos);
110+
}
111+
112+
string RteUtils::ExtractSuffix(const string& s, const char* delimiter, bool withDelimiter)
113+
{
114+
if(!delimiter) {
115+
return EMPTY_STRING;
116+
}
117+
string::size_type pos = s.find(delimiter);
118+
if(pos == string::npos) {
119+
return EMPTY_STRING;
96120
}
97-
return EMPTY_STRING;
121+
if(!withDelimiter) {
122+
pos += strlen(delimiter);
123+
}
124+
return s.substr(pos);
98125
}
99126

127+
100128
int RteUtils::CountDelimiters(const string& s, const char* delimiter)
101129
{
102130
int dlen, count = 0;

libs/rteutils/src/VersionCmp.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -313,9 +313,9 @@ const std::string VersionCmp::GetMatchingVersion(const std::string& filter,
313313
}
314314
else {
315315
VersionCmp::MatchMode mode = VersionCmp::MatchModeFromVersionString(filter);
316-
string filterVersion = RteUtils::RemovePrefixByString(filter, PREFIX_VERSION);
316+
string filterVersion = RteUtils::StripPrefix(filter, PREFIX_VERSION);
317317
if (mode == MatchMode::HIGHER_OR_EQUAL) {
318-
filterVersion = RteUtils::RemovePrefixByString(filterVersion, HIGHER_OR_EQUAL_OPERATOR);
318+
filterVersion = RteUtils::StripPrefix(filterVersion, HIGHER_OR_EQUAL_OPERATOR);
319319
}
320320
for (auto& version : availableVersions) {
321321
int result = VersionCmp::Compare(version, filterVersion, false);

libs/rteutils/test/src/RteUtilsTest.cpp

Lines changed: 56 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ TEST(RteUtilsTest, EqualNoCase) {
6767

6868
TEST(RteUtilsTest, GetPrefix) {
6969

70+
EXPECT_EQ(RteUtils::GetPrefix("prefix"), "prefix");
7071
EXPECT_EQ(RteUtils::GetPrefix("prefix:suffix"), "prefix");
7172
EXPECT_EQ(RteUtils::GetPrefix("prefix:suffix", '-'),"prefix:suffix");
7273
EXPECT_EQ(RteUtils::GetPrefix("prefix:suffix",':', true) , "prefix:");
@@ -78,6 +79,10 @@ TEST(RteUtilsTest, GetPrefix) {
7879

7980
TEST(RteUtilsTest, GetSuffix) {
8081

82+
EXPECT_TRUE(RteUtils::GetSuffix("").empty());
83+
EXPECT_TRUE(RteUtils::GetSuffix(":").empty());
84+
EXPECT_TRUE(RteUtils::GetSuffix("prefix").empty());
85+
8186
EXPECT_EQ(RteUtils::GetSuffix("prefix:suffix"), "suffix");
8287
EXPECT_TRUE(RteUtils::GetSuffix("prefix:suffix", '-').empty());
8388
EXPECT_EQ(RteUtils::GetSuffix("prefix:suffix", ':', true), ":suffix");
@@ -86,24 +91,63 @@ TEST(RteUtilsTest, GetSuffix) {
8691
EXPECT_EQ(RteUtils::GetSuffix("prefix-suffix", '-'), "suffix");
8792
}
8893

89-
TEST(RteUtilsTest, RemoveSuffixByString) {
94+
TEST(RteUtilsTest, StripSuffix) {
95+
EXPECT_EQ(RteUtils::StripSuffix("prefix:", nullptr), "prefix:");
96+
EXPECT_TRUE(RteUtils::StripSuffix("").empty());
97+
EXPECT_TRUE(RteUtils::StripSuffix(":suffix").empty());
98+
EXPECT_EQ(RteUtils::StripSuffix("prefix:"), "prefix");
99+
EXPECT_EQ(RteUtils::StripSuffix("prefix"), "prefix");
100+
101+
EXPECT_EQ(RteUtils::StripSuffix("prefix:suffix"), "prefix");
102+
EXPECT_EQ(RteUtils::StripSuffix("prefix:suffix", "-"), "prefix:suffix");
103+
EXPECT_EQ(RteUtils::StripSuffix("prefix::suffix", "::"), "prefix");
104+
105+
EXPECT_EQ(RteUtils::StripSuffix("prefix-suffix"), "prefix-suffix");
106+
EXPECT_EQ(RteUtils::StripSuffix("prefix-suffix", "-"), "prefix");
107+
}
108+
109+
TEST(RteUtilsTest, StripPrefix) {
110+
111+
EXPECT_EQ(RteUtils::StripSuffix(":suffix", nullptr), ":suffix");
112+
EXPECT_EQ(RteUtils::StripPrefix("suffix"), "suffix");
113+
EXPECT_EQ(RteUtils::StripPrefix("prefix:suffix"), "suffix");
114+
EXPECT_EQ(RteUtils::StripPrefix(":suffix"), "suffix");
115+
EXPECT_EQ(RteUtils::StripPrefix("prefix:suffix", "-"), "prefix:suffix");
116+
EXPECT_EQ(RteUtils::StripPrefix("prefix::suffix", "::"), "suffix");
117+
118+
EXPECT_EQ(RteUtils::StripPrefix("prefix-suffix"), "prefix-suffix");
119+
EXPECT_EQ(RteUtils::StripPrefix("prefix-suffix", "-"), "suffix");
120+
}
121+
122+
TEST(RteUtilsTest, ExtractPrefix) {
123+
EXPECT_TRUE(RteUtils::ExtractPrefix("prefix:", nullptr).empty());
124+
EXPECT_TRUE(RteUtils::ExtractPrefix("").empty());
125+
EXPECT_TRUE(RteUtils::ExtractPrefix("suffix").empty());
126+
EXPECT_TRUE(RteUtils::ExtractPrefix(":suffix").empty());
127+
EXPECT_EQ(RteUtils::ExtractPrefix("prefix:"), "prefix");
90128

91-
EXPECT_EQ(RteUtils::RemoveSuffixByString("prefix:suffix"), "prefix");
92-
EXPECT_TRUE(RteUtils::RemoveSuffixByString("prefix:suffix", "-").empty());
93-
EXPECT_EQ(RteUtils::RemoveSuffixByString("prefix::suffix", "::"), "prefix");
129+
EXPECT_EQ(RteUtils::ExtractPrefix("prefix:suffix"), "prefix");
130+
EXPECT_EQ(RteUtils::ExtractPrefix(":suffix", ":", true), ":");
131+
EXPECT_TRUE(RteUtils::ExtractPrefix("prefix:suffix", "-").empty());
132+
EXPECT_EQ(RteUtils::ExtractPrefix("prefix::suffix", "::"), "prefix");
133+
EXPECT_EQ(RteUtils::ExtractPrefix("prefix::suffix", "::", true), "prefix::");
94134

95-
EXPECT_TRUE(RteUtils::RemoveSuffixByString("prefix-suffix").empty());
96-
EXPECT_EQ(RteUtils::RemoveSuffixByString("prefix-suffix", "-"), "prefix");
135+
EXPECT_TRUE(RteUtils::ExtractPrefix("prefix-suffix").empty());
136+
EXPECT_EQ(RteUtils::ExtractPrefix("prefix-suffix", "-"), "prefix");
97137
}
98138

99-
TEST(RteUtilsTest, RemovePrefixByString) {
139+
TEST(RteUtilsTest, ExtractSuffix) {
140+
EXPECT_TRUE(RteUtils::ExtractSuffix(":suffix", nullptr).empty());
141+
EXPECT_TRUE(RteUtils::ExtractSuffix("").empty());
142+
EXPECT_TRUE(RteUtils::ExtractSuffix(":").empty());
143+
EXPECT_TRUE(RteUtils::ExtractSuffix("prefix").empty());
100144

101-
EXPECT_EQ(RteUtils::RemovePrefixByString("prefix:suffix"), "suffix");
102-
EXPECT_EQ(RteUtils::RemovePrefixByString("prefix:suffix", "-"), "prefix:suffix");
103-
EXPECT_EQ(RteUtils::RemovePrefixByString("prefix::suffix", "::"), "suffix");
145+
EXPECT_EQ(RteUtils::ExtractSuffix("prefix:suffix"), "suffix");
146+
EXPECT_TRUE(RteUtils::ExtractSuffix("prefix:suffix", "-").empty());
147+
EXPECT_EQ(RteUtils::ExtractSuffix("prefix:suffix", ":", true), ":suffix");
104148

105-
EXPECT_EQ(RteUtils::RemovePrefixByString("prefix-suffix"), "prefix-suffix");
106-
EXPECT_EQ(RteUtils::RemovePrefixByString("prefix-suffix", "-"), "suffix");
149+
EXPECT_TRUE(RteUtils::ExtractSuffix("prefix-suffix").empty());
150+
EXPECT_EQ(RteUtils::ExtractSuffix("prefix-suffix", "-"), "suffix");
107151
}
108152

109153
TEST(RteUtilsTest, ExtractFileExtension) {

tools/projmgr/src/ProjMgrUtils.cpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -244,8 +244,8 @@ vector<string> ProjMgrUtils::GetFilteredContexts(
244244
bool ProjMgrUtils::ConvertToPackInfo(const string& packId, PackInfo& packInfo) {
245245
string packInfoStr = packId;
246246
if (packInfoStr.find("::") != string::npos) {
247-
packInfo.vendor = RteUtils::RemoveSuffixByString(packInfoStr, "::");
248-
packInfoStr = RteUtils::RemovePrefixByString(packInfoStr, "::");
247+
packInfo.vendor = RteUtils::ExtractPrefix(packInfoStr, "::");
248+
packInfoStr = RteUtils::StripPrefix(packInfoStr, "::");
249249
packInfo.name = RteUtils::GetPrefix(packInfoStr, '@');
250250
} else {
251251
packInfo.vendor = RteUtils::GetPrefix(packInfoStr, '@');
@@ -305,15 +305,15 @@ string ProjMgrUtils::ConvertToVersionRange(const string& version) {
305305
if (!versionRange.empty()) {
306306
if (versionRange.find(HIGHER_OR_EQUAL_OPERATOR) != string::npos) {
307307
// Minimum version
308-
versionRange = RteUtils::RemovePrefixByString(versionRange, HIGHER_OR_EQUAL_OPERATOR);
308+
versionRange = RteUtils::StripPrefix(versionRange, HIGHER_OR_EQUAL_OPERATOR);
309309
} else if (versionRange.find(TILDE_OPERATOR) != string::npos) {
310310
// Equivalent version
311-
versionRange = RteUtils::RemovePrefixByString(versionRange, TILDE_OPERATOR);
311+
versionRange = RteUtils::StripPrefix(versionRange, TILDE_OPERATOR);
312312
SemVer semVer = GetSemVer(versionRange);
313313
versionRange = versionRange + ":" + to_string(semVer.major) + "." + to_string(semVer.minor + 1) + ".0-0";
314314
} else if (versionRange.find(CARET_OPERATOR) != string::npos) {
315315
// Compatible version
316-
versionRange = RteUtils::RemovePrefixByString(versionRange, CARET_OPERATOR);
316+
versionRange = RteUtils::StripPrefix(versionRange, CARET_OPERATOR);
317317
SemVer semVer = GetSemVer(versionRange);
318318
versionRange = versionRange + ":" + to_string(semVer.major + 1) + ".0.0-0";
319319
} else {

tools/projmgr/src/ProjMgrWorker.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -671,8 +671,8 @@ bool ProjMgrWorker::SetTargetAttributes(ContextItem& context, map<string, string
671671
void ProjMgrWorker::GetDeviceItem(const std::string& element, DeviceItem& device) const {
672672
string deviceInfoStr = element;
673673
if (!element.empty()) {
674-
device.vendor = RteUtils::RemoveSuffixByString(deviceInfoStr, "::");
675-
deviceInfoStr = RteUtils::RemovePrefixByString(deviceInfoStr, "::");
674+
device.vendor = RteUtils::ExtractPrefix(deviceInfoStr, "::");
675+
deviceInfoStr = RteUtils::StripPrefix(deviceInfoStr, "::");
676676
device.name = RteUtils::GetPrefix(deviceInfoStr);
677677
device.pname = RteUtils::GetSuffix(deviceInfoStr);
678678
}
@@ -681,8 +681,8 @@ void ProjMgrWorker::GetDeviceItem(const std::string& element, DeviceItem& device
681681
void ProjMgrWorker::GetBoardItem(const std::string& element, BoardItem& board) const {
682682
string boardId = element;
683683
if (!boardId.empty()) {
684-
board.vendor = RteUtils::RemoveSuffixByString(boardId, "::");
685-
boardId = RteUtils::RemovePrefixByString(boardId, "::");
684+
board.vendor = RteUtils::ExtractPrefix(boardId, "::");
685+
boardId = RteUtils::StripPrefix(boardId, "::");
686686
board.name = RteUtils::GetPrefix(boardId);
687687
board.revision = RteUtils::GetSuffix(boardId);
688688
}
@@ -1671,7 +1671,7 @@ bool ProjMgrWorker::AddPackRequirements(ContextItem& context, const vector<PackI
16711671
// Store specified pack metadata
16721672
const auto& specifiedMetadata = RteUtils::GetSuffix(packageEntry.pack, '+');
16731673
if (!specifiedMetadata.empty()) {
1674-
m_packMetadata[RteUtils::RemoveSuffixByString(packageEntry.pack, "+")] = specifiedMetadata;
1674+
m_packMetadata[RteUtils::ExtractPrefix(packageEntry.pack, "+")] = specifiedMetadata;
16751675
}
16761676
// System wide package
16771677
vector<string> matchedPackIds = FindMatchingPackIdsInCbuildPack(packageEntry, resolvedPacks);
@@ -2044,7 +2044,7 @@ RteComponent* ProjMgrWorker::ResolveComponent(RteComponentInstance* ci, ContextI
20442044
if (!freeText) {
20452045
// Check required identifier mandatory fields
20462046
string requiredComponentId = RteUtils::GetPrefix(
2047-
RteUtils::RemovePrefixByString(item.component, RteConstants::SUFFIX_CVENDOR),
2047+
RteUtils::StripPrefix(item.component, RteConstants::SUFFIX_CVENDOR),
20482048
RteConstants::PREFIX_CVERSION_CHAR);
20492049
for (const auto& [id, component] : filteredComponents) {
20502050
// Get component id without vendor and version
@@ -4372,8 +4372,8 @@ bool ProjMgrWorker::ListLayers(vector<string>& layers, const string& clayerSearc
43724372
ToolchainItem ProjMgrWorker::GetToolchain(const string& compiler) {
43734373
ToolchainItem toolchain;
43744374
if (compiler.find("@") != string::npos) {
4375-
toolchain.name = RteUtils::RemoveSuffixByString(compiler, "@");
4376-
toolchain.required = RteUtils::RemovePrefixByString(compiler, "@");
4375+
toolchain.name = RteUtils::ExtractPrefix(compiler, "@");
4376+
toolchain.required = RteUtils::StripPrefix(compiler, "@");
43774377
if (toolchain.required.find(">=") != string::npos) {
43784378
// minimum version
43794379
toolchain.range = toolchain.required.substr(2);

0 commit comments

Comments
 (0)