better cpu output

This commit is contained in:
Linus Dierheimer
2021-03-28 13:02:40 +02:00
parent efc0322ed1
commit 184eafce20
6 changed files with 177 additions and 30 deletions
+58 -1
View File
@@ -278,7 +278,7 @@ void ffStrbufTrimLeft(FFstrbuf* strbuf, char c)
if(index == 0)
return;
memcpy(strbuf->chars, strbuf->chars + index, index);
memmove(strbuf->chars, strbuf->chars + index, index);
strbuf->length -= index;
}
@@ -296,6 +296,63 @@ void ffStrbufTrim(FFstrbuf* strbuf, char c)
ffStrbufTrimLeft(strbuf, c);
}
static bool strbufRemoveTest(FFstrbuf* strbuf, uint32_t i, const char* substr)
{
uint32_t k;
for(k = 0; substr[k] != '\0'; k++)
{
if(i + k > strbuf->length)
return false;
if(strbuf->chars[i + k] != substr[k])
return false;
}
memmove(&strbuf->chars[i], &strbuf->chars[i + k], strbuf->length - i - k);
strbuf->length -= k;
strbuf->chars[strbuf->length] = '\0';
return true;
}
void ffStrbufRemoveStrings(FFstrbuf* strbuf, uint32_t numStrings, ...)
{
const char* strings[numStrings];
va_list argp;
va_start(argp, numStrings);
for(uint32_t i = 0; i < numStrings; i++)
strings[i] = va_arg(argp, const char*);
va_end(argp);
for(uint32_t i = 0; i < strbuf->length; i++)
{
for(uint32_t k = 0; k < numStrings; k++)
while(strbufRemoveTest(strbuf, i, strings[k]));
}
}
uint32_t ffStrbufLastIndexC(FFstrbuf* strbuf, const char c)
{
//We need to loop one higher than the actual index, because uint32_t is guranteed to be >= 0, so this statement would always be true
for(uint32_t i = strbuf->length; i > 0; i--)
{
if(strbuf->chars[i - 1] == c)
return i - 1;
}
return strbuf->length;
}
void ffStrbufLimitLength(FFstrbuf* strbuf, uint32_t length)
{
if(strbuf->length <= length)
return;
strbuf->length = length;
strbuf->chars[strbuf->length] = '\0';
}
void ffStrbufDestroy(FFstrbuf* strbuf)
{
free(strbuf->chars);
+6
View File
@@ -66,6 +66,12 @@ void ffStrbufTrimLeft(FFstrbuf* strbuf, char c);
void ffStrbufTrimRight(FFstrbuf* strbuf, char c);
void ffStrbufTrim(FFstrbuf* strbuf, char c);
void ffStrbufRemoveStrings(FFstrbuf* strbuf, uint32_t numStrings, ...);
uint32_t ffStrbufLastIndexC(FFstrbuf* strbuf, const char c);
void ffStrbufLimitLength(FFstrbuf* strbuf, uint32_t length);
void ffStrbufDestroy(FFstrbuf* strbuf);
#endif