mirror of
https://github.com/fastfetch-cli/fastfetch.git
synced 2026-10-30 17:41:41 +01:00
much more efficient caching
This commit is contained in:
@@ -0,0 +1,36 @@
|
||||
#include "FFlist.h"
|
||||
|
||||
#include <malloc.h>
|
||||
#include <memory.h>
|
||||
|
||||
void ffListInit(FFlist* list, uint32_t elementSize)
|
||||
{
|
||||
ffListInitA(list, elementSize, FF_LIST_DEFAULT_ALLOC);
|
||||
}
|
||||
|
||||
void ffListInitA(FFlist* list, uint32_t elementSize, uint32_t capacity)
|
||||
{
|
||||
list->elementSize = elementSize;
|
||||
list->capacity = capacity;
|
||||
list->length = 0;
|
||||
list->data = malloc(list->capacity * list->elementSize);
|
||||
}
|
||||
|
||||
void* ffListGet(FFlist* list, uint32_t index)
|
||||
{
|
||||
return list->data + (index * list->elementSize);
|
||||
}
|
||||
|
||||
void* ffListAdd(FFlist* list)
|
||||
{
|
||||
if(list->length == list->capacity)
|
||||
list->data = realloc(list->data, list->capacity * 2 * list->elementSize);
|
||||
void* adress = list->data + (list->length * list->elementSize);
|
||||
++list->length;
|
||||
return adress;
|
||||
}
|
||||
|
||||
void ffListDestroy(FFlist* list)
|
||||
{
|
||||
free(list->data);
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
#pragma once
|
||||
|
||||
#ifndef FF_INCLUDED_FFLIST
|
||||
#define FF_INCLUDED_FFLIST
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#define FF_LIST_DEFAULT_ALLOC 16
|
||||
|
||||
typedef struct FFlist
|
||||
{
|
||||
void* data;
|
||||
uint32_t elementSize;
|
||||
uint32_t length;
|
||||
uint32_t capacity;
|
||||
} FFlist;
|
||||
|
||||
void ffListInit(FFlist* list, uint32_t elementSize);
|
||||
void ffListInitA(FFlist* list, uint32_t elementSize, uint32_t capacity);
|
||||
|
||||
void* ffListGet(FFlist* list, uint32_t index);
|
||||
|
||||
void* ffListAdd(FFlist* list);
|
||||
|
||||
void ffListDestroy(FFlist* list);
|
||||
|
||||
#endif
|
||||
+3
-6
@@ -203,7 +203,7 @@ void ffStrbufAppendVF(FFstrbuf* strbuf, const char* format, va_list arguments)
|
||||
va_copy(localArguments, arguments);
|
||||
|
||||
ffStrbufEnsureFree(strbuf, 256);
|
||||
int written = vsnprintf(strbuf->chars + strbuf->length, strbuf->allocated - strbuf->length, format, localArguments);
|
||||
uint32_t written = (uint32_t) vsnprintf(strbuf->chars + strbuf->length, strbuf->allocated - strbuf->length, format, localArguments);
|
||||
|
||||
va_end(localArguments);
|
||||
|
||||
@@ -227,12 +227,12 @@ char ffStrbufGetC(FFstrbuf* strbuf, uint32_t index)
|
||||
return strbuf->chars[index];
|
||||
}
|
||||
|
||||
void ffStrbufWriteTo(FFstrbuf* strbuf, FILE* file)
|
||||
void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file)
|
||||
{
|
||||
fwrite(strbuf->chars, sizeof(char), strbuf->length, file);
|
||||
}
|
||||
|
||||
void ffStrbufPutTo(FFstrbuf* strbuf, FILE* file)
|
||||
void ffStrbufPutTo(const FFstrbuf* strbuf, FILE* file)
|
||||
{
|
||||
fwrite(strbuf->chars, sizeof(char), strbuf->length, file);
|
||||
fputc('\n', file);
|
||||
@@ -462,7 +462,4 @@ void ffStrbufRecalculateLength(FFstrbuf* strbuf)
|
||||
void ffStrbufDestroy(FFstrbuf* strbuf)
|
||||
{
|
||||
free(strbuf->chars);
|
||||
strbuf->allocated = 0;
|
||||
strbuf->chars = NULL;
|
||||
strbuf->length = 0;
|
||||
}
|
||||
|
||||
+2
-2
@@ -52,8 +52,8 @@ void ffStrbufAppendVF(FFstrbuf* strbuf, const char* format, va_list arguments);
|
||||
|
||||
char ffStrbufGetC(FFstrbuf* strbuf, uint32_t index);
|
||||
|
||||
void ffStrbufWriteTo(FFstrbuf* strbuf, FILE* file);
|
||||
void ffStrbufPutTo(FFstrbuf* strbuf, FILE* file);
|
||||
void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file);
|
||||
void ffStrbufPutTo(const FFstrbuf* strbuf, FILE* file);
|
||||
|
||||
int ffStrbufComp(FFstrbuf* strbuf, const FFstrbuf* comp);
|
||||
int ffStrbufCompS(FFstrbuf* strbuf, const char* comp);
|
||||
|
||||
Reference in New Issue
Block a user