mirror of
https://github.com/ethereum/solidity
synced 2023-10-03 13:03:40 +00:00
Merge pull request #4662 from evgeniuz/develop
added helper function that joins vectors of strings
This commit is contained in:
commit
2c2d4c47ea
@ -85,17 +85,11 @@ size_t dev::stringDistance(string const& _str1, string const& _str2)
|
||||
|
||||
string dev::quotedAlternativesList(vector<string> const& suggestions)
|
||||
{
|
||||
if (suggestions.empty())
|
||||
return "";
|
||||
if (suggestions.size() == 1)
|
||||
return "\"" + suggestions.front() + "\"";
|
||||
vector<string> quotedSuggestions;
|
||||
|
||||
string choices = "\"" + suggestions.front() + "\"";
|
||||
for (size_t i = 1; i + 1 < suggestions.size(); ++i)
|
||||
choices += ", \"" + suggestions[i] + "\"";
|
||||
for (auto& suggestion: suggestions)
|
||||
quotedSuggestions.push_back("\"" + suggestion + "\"");
|
||||
|
||||
choices += " or \"" + suggestions.back() + "\"";
|
||||
|
||||
return choices;
|
||||
return joinHumanReadable(quotedSuggestions, ", ", " or ");
|
||||
}
|
||||
|
||||
|
@ -36,4 +36,43 @@ size_t stringDistance(std::string const& _str1, std::string const& _str2);
|
||||
// Return a string having elements of suggestions as quoted, alternative suggestions. e.g. "a", "b" or "c"
|
||||
std::string quotedAlternativesList(std::vector<std::string> const& suggestions);
|
||||
|
||||
/// Joins collection of strings into one string with separators between, last separator can be different.
|
||||
/// @param _list collection of strings to join
|
||||
/// @param _separator defaults to ", "
|
||||
/// @param _lastSeparator (optional) will be used to separate last two strings instead of _separator
|
||||
/// @example join(vector<string>{"a", "b", "c"}, "; ", " or ") == "a; b or c"
|
||||
template<class T>
|
||||
std::string joinHumanReadable
|
||||
(
|
||||
T const& _list,
|
||||
std::string const& _separator = ", ",
|
||||
std::string const& _lastSeparator = ""
|
||||
)
|
||||
{
|
||||
auto it = begin(_list);
|
||||
auto itEnd = end(_list);
|
||||
|
||||
std::string result;
|
||||
|
||||
// append first string
|
||||
if (it != itEnd)
|
||||
{
|
||||
result += *it;
|
||||
++it;
|
||||
}
|
||||
|
||||
for (;it != itEnd; ++it)
|
||||
{
|
||||
if ((next(it) == itEnd) && !_lastSeparator.empty())
|
||||
result += _lastSeparator; // last iteration
|
||||
else
|
||||
result += _separator;
|
||||
|
||||
// append string
|
||||
result += *it;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -81,6 +81,24 @@ BOOST_AUTO_TEST_CASE(test_alternatives_list)
|
||||
BOOST_CHECK_EQUAL(quotedAlternativesList(strings), "\"a\", \"b\", \"c\" or \"d\"");
|
||||
}
|
||||
|
||||
BOOST_AUTO_TEST_CASE(test_human_readable_join)
|
||||
{
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({})), "");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a"})), "a");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b"})), "a, b");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b", "c"})), "a, b, c");
|
||||
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({}), "; "), "");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a"}), "; "), "a");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b"}), "; "), "a; b");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b", "c"}), "; "), "a; b; c");
|
||||
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({}), "; ", " or "), "");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a"}), "; ", " or "), "a");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b"}), "; ", " or "), "a or b");
|
||||
BOOST_CHECK_EQUAL(joinHumanReadable(vector<string>({"a", "b", "c"}), "; ", " or "), "a; b or c");
|
||||
}
|
||||
|
||||
|
||||
BOOST_AUTO_TEST_SUITE_END()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user