mirror of
https://github.com/thunderbrewhq/squall.git
synced 2025-12-12 02:22:30 +00:00
feat(string): add SStrPack
This commit is contained in:
parent
48797d7d3e
commit
bc499d065c
3 changed files with 71 additions and 0 deletions
|
|
@ -304,6 +304,49 @@ void SStrLower(char* string) {
|
|||
}
|
||||
}
|
||||
|
||||
uint32_t SStrPack(char* dest, const char* source, uint32_t destsize) {
|
||||
STORM_ASSERT(dest);
|
||||
STORM_ASSERT(source);
|
||||
|
||||
if (!destsize) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
char* i;
|
||||
const char* v5;
|
||||
char v6;
|
||||
const char* j;
|
||||
|
||||
for (i = dest; *i; i++)
|
||||
;
|
||||
|
||||
if (destsize == STORM_MAX_STR) {
|
||||
v6 = *source;
|
||||
|
||||
for (j = source; *j; i++) {
|
||||
j++;
|
||||
*i = v6;
|
||||
v6 = *j;
|
||||
}
|
||||
} else {
|
||||
v5 = source;
|
||||
|
||||
if (*source) {
|
||||
while (i < &dest[destsize - 1]) {
|
||||
*i++ = *v5++;
|
||||
|
||||
if (!*v5) {
|
||||
*i = '\0';
|
||||
return i - dest;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*i = '\0';
|
||||
return i - dest;
|
||||
}
|
||||
|
||||
const char* SStrStr(const char* string, const char* search) {
|
||||
STORM_ASSERT(string);
|
||||
STORM_ASSERT(search);
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ size_t SStrLen(const char* string);
|
|||
|
||||
void SStrLower(char* string);
|
||||
|
||||
uint32_t SStrPack(char* dest, const char* source, uint32_t destsize);
|
||||
|
||||
const char* SStrStr(const char* string, const char* search);
|
||||
|
||||
float SStrToFloat(const char* string);
|
||||
|
|
|
|||
|
|
@ -181,6 +181,32 @@ TEST_CASE("SStrLower", "[string]") {
|
|||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SStrPack", "[string]") {
|
||||
SECTION("truncates dest correctly when first byte in source is null") {
|
||||
char dest[10] = { 0 };
|
||||
auto source = "\0foobar";
|
||||
auto length = SStrPack(dest, source, 10);
|
||||
REQUIRE(length == 0);
|
||||
REQUIRE(!SStrCmp(dest, "", SStrLen("")));
|
||||
}
|
||||
|
||||
SECTION("truncates dest correctly when middle byte in source is null") {
|
||||
char dest[10] = { 0 };
|
||||
auto source = "foo\0bar";
|
||||
auto length = SStrPack(dest, source, 10);
|
||||
REQUIRE(length == 3);
|
||||
REQUIRE(!SStrCmp(dest, "foo", SStrLen("foo")));
|
||||
}
|
||||
|
||||
SECTION("does not truncate dest when source has no early null byte") {
|
||||
char dest[10] = { 0 };
|
||||
auto source = "foobar";
|
||||
auto length = SStrPack(dest, source, 10);
|
||||
REQUIRE(length == 6);
|
||||
REQUIRE(!SStrCmp(dest, "foobar", SStrLen("foobar")));
|
||||
}
|
||||
}
|
||||
|
||||
TEST_CASE("SStrStr", "[string]") {
|
||||
SECTION("finds substring when it exists at end of string") {
|
||||
auto string = "foobar";
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue