fix: Split String returning an empty string when an empty string is passed in

Tested that slash commands function as before, except now if you pass no arguments to a command like /fly, it no longer reports an invalid command.
This commit is contained in:
David Markowitz 2025-06-29 01:43:53 -07:00
parent 48510b7315
commit 03b1c2b183
3 changed files with 16 additions and 55 deletions

View File

@ -237,57 +237,6 @@ bool GeneralUtils::ReplaceInString(std::string& str, const std::string_view from
return true;
}
std::vector<std::wstring> GeneralUtils::SplitString(const std::wstring_view str, const wchar_t delimiter) {
std::vector<std::wstring> vector = std::vector<std::wstring>();
std::wstring current;
for (const wchar_t c : str) {
if (c == delimiter) {
vector.push_back(current);
current = L"";
} else {
current += c;
}
}
vector.push_back(std::move(current));
return vector;
}
std::vector<std::u16string> GeneralUtils::SplitString(const std::u16string_view str, const char16_t delimiter) {
std::vector<std::u16string> vector = std::vector<std::u16string>();
std::u16string current;
for (const char16_t c : str) {
if (c == delimiter) {
vector.push_back(current);
current = u"";
} else {
current += c;
}
}
vector.push_back(std::move(current));
return vector;
}
std::vector<std::string> GeneralUtils::SplitString(const std::string_view str, const char delimiter) {
std::vector<std::string> vector = std::vector<std::string>();
std::string current = "";
for (const char c : str) {
if (c == delimiter) {
vector.push_back(current);
current = "";
} else {
current += c;
}
}
vector.push_back(std::move(current));
return vector;
}
std::u16string GeneralUtils::ReadWString(RakNet::BitStream& inStream) {
uint32_t length;
inStream.Read<uint32_t>(length);

View File

@ -130,11 +130,23 @@ namespace GeneralUtils {
std::u16string ReadWString(RakNet::BitStream& inStream);
std::vector<std::wstring> SplitString(const std::wstring_view str, const wchar_t delimiter);
template<typename StringType, typename CharType = typename StringType::value_type>
std::vector<std::basic_string<CharType>> SplitString(const StringType& str, const typename StringType::value_type delimiter) {
std::vector<std::basic_string<CharType>> toReturn{};
std::vector<std::u16string> SplitString(const std::u16string_view str, const char16_t delimiter);
toReturn.emplace_back();
auto itr = toReturn.rbegin();
for (const auto c : str) {
if (c == delimiter) {
toReturn.emplace_back();
itr = toReturn.rbegin();
} else {
(*itr).push_back(c);
}
}
std::vector<std::string> SplitString(const std::string_view str, const char delimiter);
return toReturn;
}
std::vector<std::string> GetSqlFileNamesFromFolder(const std::string_view folder);

View File

@ -1777,7 +1777,7 @@ void InventoryComponent::LoadGroupXml(const tinyxml2::XMLElement& groups) {
group.groupId = groupId;
group.groupName = groupName;
for (const auto& lotStr : GeneralUtils::SplitString(lots, ' ')) {
for (const auto& lotStr : GeneralUtils::SplitString(std::string_view(lots), ' ')) {
auto lot = GeneralUtils::TryParse<LOT>(lotStr);
if (lot) group.lots.insert(*lot);
}