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) {
|
const char* SStrStr(const char* string, const char* search) {
|
||||||
STORM_ASSERT(string);
|
STORM_ASSERT(string);
|
||||||
STORM_ASSERT(search);
|
STORM_ASSERT(search);
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ size_t SStrLen(const char* string);
|
||||||
|
|
||||||
void SStrLower(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);
|
const char* SStrStr(const char* string, const char* search);
|
||||||
|
|
||||||
float SStrToFloat(const char* string);
|
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]") {
|
TEST_CASE("SStrStr", "[string]") {
|
||||||
SECTION("finds substring when it exists at end of string") {
|
SECTION("finds substring when it exists at end of string") {
|
||||||
auto string = "foobar";
|
auto string = "foobar";
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue