mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-09-13 02:42:09 +02:00
FFstrbuf: improve ffStrbufSubstr*
This commit is contained in:
+36
-22
@@ -292,21 +292,22 @@ void ffStrbufTrimRightSpace(FFstrbuf* strbuf)
|
||||
strbuf->chars[strbuf->length] = '\0';
|
||||
}
|
||||
|
||||
void ffStrbufRemoveSubstr(FFstrbuf* strbuf, uint32_t startIndex, uint32_t endIndex)
|
||||
bool ffStrbufRemoveSubstr(FFstrbuf* strbuf, uint32_t startIndex, uint32_t endIndex)
|
||||
{
|
||||
if(startIndex > strbuf->length || startIndex >= endIndex)
|
||||
return;
|
||||
return false;
|
||||
|
||||
if(endIndex > strbuf->length)
|
||||
{
|
||||
ffStrbufSubstrBefore(strbuf, startIndex);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
ffStrbufEnsureFree(strbuf, 0);
|
||||
memmove(strbuf->chars + startIndex, strbuf->chars + endIndex, strbuf->length - endIndex);
|
||||
strbuf->length -= (endIndex - startIndex);
|
||||
strbuf->chars[strbuf->length] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
void ffStrbufRemoveS(FFstrbuf* strbuf, const char* str)
|
||||
@@ -362,28 +363,29 @@ void ffStrbufReplaceAllC(FFstrbuf* strbuf, char find, char replace)
|
||||
*current_pos = replace;
|
||||
}
|
||||
|
||||
void ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index)
|
||||
bool ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index)
|
||||
{
|
||||
if(strbuf->length <= index)
|
||||
return;
|
||||
return false;
|
||||
|
||||
if(strbuf->allocated == 0)
|
||||
{
|
||||
//static string
|
||||
ffStrbufInitNS(strbuf, strbuf->length, strbuf->chars);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
strbuf->length = index;
|
||||
strbuf->chars[strbuf->length] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
void ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index)
|
||||
bool ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index)
|
||||
{
|
||||
if(index >= strbuf->length)
|
||||
{
|
||||
ffStrbufClear(strbuf);
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
if(strbuf->allocated == 0)
|
||||
@@ -391,36 +393,45 @@ void ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index)
|
||||
//static string
|
||||
strbuf->length -= index + 1;
|
||||
strbuf->chars += index + 1;
|
||||
return;
|
||||
return true;
|
||||
}
|
||||
|
||||
memmove(strbuf->chars, strbuf->chars + index + 1, strbuf->length - index - 1);
|
||||
strbuf->length -= (index + 1);
|
||||
strbuf->chars[strbuf->length] = '\0';
|
||||
return true;
|
||||
}
|
||||
|
||||
void ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, char c)
|
||||
bool ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, char c)
|
||||
{
|
||||
uint32_t index = ffStrbufFirstIndexC(strbuf, c);
|
||||
if(index < strbuf->length)
|
||||
ffStrbufSubstrAfter(strbuf, index);
|
||||
if(index >= strbuf->length)
|
||||
return false;
|
||||
ffStrbufSubstrAfter(strbuf, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
void ffStrbufSubstrAfterFirstS(FFstrbuf* strbuf, const char* str)
|
||||
bool ffStrbufSubstrAfterFirstS(FFstrbuf* strbuf, const char* str)
|
||||
{
|
||||
if(*str == '\0')
|
||||
return;
|
||||
return false;
|
||||
|
||||
uint32_t index = ffStrbufFirstIndexS(strbuf, str) + (uint32_t) strlen(str) - 1; // -1, because firstIndexS is already pointing to str[0], we want to add only the remaining length
|
||||
if(index < strbuf->length)
|
||||
ffStrbufSubstrAfter(strbuf, index);
|
||||
if(index >= strbuf->length)
|
||||
return false;
|
||||
|
||||
ffStrbufSubstrAfter(strbuf, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
void ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, char c)
|
||||
bool ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, char c)
|
||||
{
|
||||
uint32_t index = ffStrbufLastIndexC(strbuf, c);
|
||||
if(index < strbuf->length)
|
||||
ffStrbufSubstrAfter(strbuf, index);
|
||||
if(index >= strbuf->length)
|
||||
return false;
|
||||
|
||||
ffStrbufSubstrAfter(strbuf, index);
|
||||
return true;
|
||||
}
|
||||
|
||||
uint32_t ffStrbufCountC(const FFstrbuf* strbuf, char c)
|
||||
@@ -448,10 +459,13 @@ bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end)
|
||||
return false;
|
||||
}
|
||||
|
||||
void ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c)
|
||||
bool ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c)
|
||||
{
|
||||
if(!ffStrbufEndsWithC(strbuf, c))
|
||||
ffStrbufAppendC(strbuf, c);
|
||||
if(ffStrbufEndsWithC(strbuf, c))
|
||||
return false;
|
||||
|
||||
ffStrbufAppendC(strbuf, c);
|
||||
return true;
|
||||
}
|
||||
|
||||
void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file)
|
||||
|
||||
+12
-11
@@ -56,7 +56,7 @@ void ffStrbufTrimLeft(FFstrbuf* strbuf, char c);
|
||||
void ffStrbufTrimRight(FFstrbuf* strbuf, char c);
|
||||
void ffStrbufTrimRightSpace(FFstrbuf* strbuf);
|
||||
|
||||
void ffStrbufRemoveSubstr(FFstrbuf* strbuf, uint32_t startIndex, uint32_t endIndex);
|
||||
bool ffStrbufRemoveSubstr(FFstrbuf* strbuf, uint32_t startIndex, uint32_t endIndex);
|
||||
void ffStrbufRemoveS(FFstrbuf* strbuf, const char* str);
|
||||
void ffStrbufRemoveStrings(FFstrbuf* strbuf, uint32_t numStrings, const char* strings[]);
|
||||
|
||||
@@ -67,17 +67,18 @@ FF_C_NODISCARD uint32_t ffStrbufPreviousIndexC(const FFstrbuf* strbuf, uint32_t
|
||||
|
||||
void ffStrbufReplaceAllC(FFstrbuf* strbuf, char find, char replace);
|
||||
|
||||
void ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index);
|
||||
void ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index); // Not including the index
|
||||
void ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, char c);
|
||||
void ffStrbufSubstrAfterFirstS(FFstrbuf* strbuf, const char* str);
|
||||
void ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, char c);
|
||||
// Returns true if the strbuf is modified
|
||||
bool ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index);
|
||||
bool ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index); // Not including the index
|
||||
bool ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, char c);
|
||||
bool ffStrbufSubstrAfterFirstS(FFstrbuf* strbuf, const char* str);
|
||||
bool ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, char c);
|
||||
|
||||
FF_C_NODISCARD uint32_t ffStrbufCountC(const FFstrbuf* strbuf, char c);
|
||||
|
||||
bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end);
|
||||
|
||||
void ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c);
|
||||
bool ffStrbufEnsureEndsWithC(FFstrbuf* strbuf, char c);
|
||||
|
||||
void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file);
|
||||
void ffStrbufPutTo(const FFstrbuf* strbuf, FILE* file);
|
||||
@@ -383,14 +384,14 @@ static inline FF_C_NODISCARD uint32_t ffStrbufLastIndexC(const FFstrbuf* strbuf,
|
||||
return ffStrbufPreviousIndexC(strbuf, strbuf->length - 1, c);
|
||||
}
|
||||
|
||||
static inline void ffStrbufSubstrBeforeFirstC(FFstrbuf* strbuf, char c)
|
||||
static inline bool ffStrbufSubstrBeforeFirstC(FFstrbuf* strbuf, char c)
|
||||
{
|
||||
ffStrbufSubstrBefore(strbuf, ffStrbufFirstIndexC(strbuf, c));
|
||||
return ffStrbufSubstrBefore(strbuf, ffStrbufFirstIndexC(strbuf, c));
|
||||
}
|
||||
|
||||
static inline void ffStrbufSubstrBeforeLastC(FFstrbuf* strbuf, char c)
|
||||
static inline bool ffStrbufSubstrBeforeLastC(FFstrbuf* strbuf, char c)
|
||||
{
|
||||
ffStrbufSubstrBefore(strbuf, ffStrbufLastIndexC(strbuf, c));
|
||||
return ffStrbufSubstrBefore(strbuf, ffStrbufLastIndexC(strbuf, c));
|
||||
}
|
||||
|
||||
static inline FF_C_NODISCARD bool ffStrbufStartsWithC(const FFstrbuf* strbuf, char c)
|
||||
|
||||
+20
-6
@@ -93,12 +93,26 @@ int main(void)
|
||||
|
||||
//substr
|
||||
|
||||
ffStrbufSubstrBefore(&strbuf, 9);
|
||||
VERIFY(ffStrbufSubstrBefore(&strbuf, 9));
|
||||
VERIFY(strbuf.length == 9);
|
||||
VERIFY(strbuf.allocated >= 110);
|
||||
VERIFY(strbuf.chars[strbuf.length] == 0);
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "123456789"));
|
||||
|
||||
VERIFY(!ffStrbufSubstrBeforeFirstC(&strbuf, '0'));
|
||||
VERIFY(!ffStrbufSubstrBeforeLastC(&strbuf, '0'));
|
||||
VERIFY(!ffStrbufSubstrAfterFirstC(&strbuf, '0'));
|
||||
VERIFY(!ffStrbufSubstrAfterLastC(&strbuf, '0'));
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "123456789"));
|
||||
|
||||
VERIFY(ffStrbufSubstrBeforeFirstC(&strbuf, '9'));
|
||||
VERIFY(ffStrbufSubstrBeforeLastC(&strbuf, '8'));
|
||||
VERIFY(ffStrbufSubstrAfterFirstC(&strbuf, '1'));
|
||||
VERIFY(ffStrbufSubstrAfterLastC(&strbuf, '2'));
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "34567"));
|
||||
|
||||
ffStrbufSetS(&strbuf, "123456789");
|
||||
|
||||
//startsWithC
|
||||
|
||||
VERIFY(ffStrbufStartsWithC(&strbuf, '1'));
|
||||
@@ -313,7 +327,7 @@ int main(void)
|
||||
|
||||
//ffStrbufCreateStatic / Substr
|
||||
ffStrbufInitStatic(&strbuf, "__TEST__");
|
||||
ffStrbufRemoveSubstr(&strbuf, 0, 6);
|
||||
VERIFY(ffStrbufRemoveSubstr(&strbuf, 0, 6));
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "__"));
|
||||
VERIFY(strbuf.length == 2);
|
||||
VERIFY(strbuf.allocated > 0);
|
||||
@@ -321,7 +335,7 @@ int main(void)
|
||||
|
||||
//ffStrbufCreateStatic / Substr
|
||||
ffStrbufInitStatic(&strbuf, "__TEST__");
|
||||
ffStrbufRemoveSubstr(&strbuf, 2, 8);
|
||||
VERIFY(ffStrbufRemoveSubstr(&strbuf, 2, 8));
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "__"));
|
||||
VERIFY(strbuf.length == 2);
|
||||
VERIFY(strbuf.allocated > 0);
|
||||
@@ -329,13 +343,13 @@ int main(void)
|
||||
|
||||
//ffStrbufCreateStatic / Substr
|
||||
ffStrbufInitStatic(&strbuf, "__TEST__");
|
||||
ffStrbufRemoveSubstr(&strbuf, 2, 6);
|
||||
VERIFY(ffStrbufRemoveSubstr(&strbuf, 2, 6));
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "____"));
|
||||
VERIFY(strbuf.length == 4);
|
||||
VERIFY(strbuf.allocated > 0);
|
||||
ffStrbufDestroy(&strbuf);
|
||||
|
||||
//ffStrbufCreateStatic / Substr
|
||||
//ffStrbufCreateStatic / ReplaceAllC
|
||||
ffStrbufInitStatic(&strbuf, "__TEST__");
|
||||
ffStrbufReplaceAllC(&strbuf, '_', '-');
|
||||
VERIFY(ffStrbufEqualS(&strbuf, "--TEST--"));
|
||||
@@ -403,5 +417,5 @@ int main(void)
|
||||
ffStrbufDestroy(&strbuf);
|
||||
|
||||
//Success
|
||||
puts("\033[32mAll tests passed!" FASTFETCH_TEXT_MODIFIER_RESET);
|
||||
puts("\e[32mAll tests passed!" FASTFETCH_TEXT_MODIFIER_RESET);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user