mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2025-02-20 11:43:27 +08:00
FFstrbuf: add new methods ffStrbufPrependC
and ffStrbufInsertNC
This commit is contained in:
parent
8295f66320
commit
4d7d367e72
@ -211,6 +211,14 @@ void ffStrbufPrependNS(FFstrbuf* strbuf, uint32_t length, const char* value)
|
||||
strbuf->length += length;
|
||||
}
|
||||
|
||||
void ffStrbufPrependC(FFstrbuf* strbuf, char c)
|
||||
{
|
||||
ffStrbufEnsureFree(strbuf, 1);
|
||||
memmove(strbuf->chars + 1, strbuf->chars, strbuf->length + 1); // + 1 for the null byte
|
||||
strbuf->chars[0] = c;
|
||||
strbuf->length += 1;
|
||||
}
|
||||
|
||||
void ffStrbufSetNS(FFstrbuf* strbuf, uint32_t length, const char* value)
|
||||
{
|
||||
ffStrbufClear(strbuf);
|
||||
@ -511,3 +519,15 @@ void ffStrbufLowerCase(FFstrbuf* strbuf)
|
||||
for (uint32_t i = 0; i < strbuf->length; ++i)
|
||||
strbuf->chars[i] = (char) tolower(strbuf->chars[i]);
|
||||
}
|
||||
|
||||
void ffStrbufInsertNC(FFstrbuf* strbuf, uint32_t index, uint32_t num, char c)
|
||||
{
|
||||
if(num == 0) return;
|
||||
if (index >= strbuf->length)
|
||||
index = strbuf->length;
|
||||
|
||||
ffStrbufEnsureFree(strbuf, num);
|
||||
memmove(strbuf->chars + index + num, strbuf->chars + index, strbuf->length - index + 1);
|
||||
memset(&strbuf->chars[index], c, num);
|
||||
strbuf->length += num;
|
||||
}
|
||||
|
@ -47,6 +47,9 @@ void ffStrbufAppendVF(FFstrbuf* strbuf, const char* format, va_list arguments);
|
||||
const char* ffStrbufAppendSUntilC(FFstrbuf* strbuf, const char* value, char until);
|
||||
|
||||
void ffStrbufPrependNS(FFstrbuf* strbuf, uint32_t length, const char* value);
|
||||
void ffStrbufPrependC(FFstrbuf* strbuf, char c);
|
||||
|
||||
void ffStrbufInsertNC(FFstrbuf* strbuf, uint32_t index, uint32_t num, char c);
|
||||
|
||||
void ffStrbufSetNS(FFstrbuf* strbuf, uint32_t length, const char* value);
|
||||
void ffStrbufSet(FFstrbuf* strbuf, const FFstrbuf* value);
|
||||
|
@ -279,6 +279,20 @@ int main(void)
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "TEST_TEST"));
|
||||
VERIFY(strbuf.length == 9);
|
||||
VERIFY(strbuf.allocated >= 10);
|
||||
ffStrbufAppendC(&strbuf, '_');
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "TEST_TEST_"));
|
||||
ffStrbufDestroy(&strbuf);
|
||||
VERIFY(strbuf.length == 0);
|
||||
VERIFY(strbuf.allocated == 0);
|
||||
|
||||
//ffStrbufCreateStatic / Prepend
|
||||
ffStrbufInitStatic(&strbuf, "TEST");
|
||||
ffStrbufPrependS(&strbuf, "TEST_");
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "TEST_TEST"));
|
||||
VERIFY(strbuf.length == 9);
|
||||
VERIFY(strbuf.allocated >= 10);
|
||||
ffStrbufPrependC(&strbuf, '_');
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "_TEST_TEST"));
|
||||
ffStrbufDestroy(&strbuf);
|
||||
VERIFY(strbuf.length == 0);
|
||||
VERIFY(strbuf.allocated == 0);
|
||||
@ -416,6 +430,18 @@ int main(void)
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "__TEST__"));
|
||||
ffStrbufDestroy(&strbuf);
|
||||
|
||||
//ffStrbufInsertNC
|
||||
ffStrbufInitStatic(&strbuf, "123456");
|
||||
ffStrbufInsertNC(&strbuf, 0, 2, 'A');
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "AA123456"));
|
||||
ffStrbufInsertNC(&strbuf, 4, 2, 'B');
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "AA12BB3456"));
|
||||
ffStrbufInsertNC(&strbuf, strbuf.length, 2, 'C');
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "AA12BB3456CC"));
|
||||
ffStrbufInsertNC(&strbuf, 999, 2, 'D');
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "AA12BB3456CCDD"));
|
||||
ffStrbufDestroy(&strbuf);
|
||||
|
||||
//Success
|
||||
puts("\e[32mAll tests passed!" FASTFETCH_TEXT_MODIFIER_RESET);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user