2021-03-19 20:57:07 +01:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
#ifndef FASTFETCH_INCLUDED_FFSTRBUF
|
|
|
|
|
#define FASTFETCH_INCLUDED_FFSTRBUF
|
|
|
|
|
|
|
|
|
|
#include <stdint.h>
|
|
|
|
|
#include <stdarg.h>
|
|
|
|
|
#include <stdbool.h>
|
|
|
|
|
#include <stdio.h>
|
|
|
|
|
|
2021-04-03 12:14:25 +02:00
|
|
|
#define FASTFETCH_STRBUF_DEFAULT_ALLOC 32
|
2021-03-19 20:57:07 +01:00
|
|
|
|
|
|
|
|
typedef struct FFstrbuf
|
|
|
|
|
{
|
|
|
|
|
uint32_t allocated;
|
|
|
|
|
uint32_t length;
|
|
|
|
|
char* chars;
|
|
|
|
|
} FFstrbuf;
|
|
|
|
|
|
2021-03-21 16:52:17 +01:00
|
|
|
#define FF_STRBUF_CREATE(name) FFstrbuf name; ffStrbufInit(&name);
|
|
|
|
|
|
2021-03-19 20:57:07 +01:00
|
|
|
void ffStrbufInit(FFstrbuf* strbuf);
|
2021-03-21 20:42:07 +01:00
|
|
|
void ffStrbufInitCopy(FFstrbuf* strbuf, const FFstrbuf* src);
|
2021-03-19 20:57:07 +01:00
|
|
|
void ffStrbufInitS(FFstrbuf* strbuf, const char* value);
|
|
|
|
|
void ffStrbufInitNS(FFstrbuf* strbuf, uint32_t length, const char* value);
|
|
|
|
|
void ffStrbufInitC(FFstrbuf* strbuf, const char c);
|
|
|
|
|
void ffStrbufInitA(FFstrbuf* strbuf, uint32_t allocate);
|
|
|
|
|
void ffStrbufInitAS(FFstrbuf* strbuf, uint32_t allocate, const char* value);
|
|
|
|
|
void ffStrbufInitANS(FFstrbuf* strbuf, uint32_t allocate, uint32_t length, const char* value);
|
|
|
|
|
void ffStrbufInitAC(FFstrbuf* strbuf, uint32_t allocate, const char c);
|
|
|
|
|
void ffStrbufInitF(FFstrbuf* strbuf, const char* format, ...);
|
|
|
|
|
void ffStrbufInitVF(FFstrbuf* strbuf, const char* format, va_list arguments);
|
|
|
|
|
|
|
|
|
|
void ffStrbufEnsureCapacity(FFstrbuf* strbuf, uint32_t allocate);
|
|
|
|
|
void ffStrbufEnsureFree(FFstrbuf* strbuf, uint32_t free);
|
|
|
|
|
|
2021-11-17 10:59:31 +01:00
|
|
|
uint32_t ffStrbufGetFree(const FFstrbuf* strbuf);
|
|
|
|
|
|
2021-03-19 20:57:07 +01:00
|
|
|
void ffStrbufClear(FFstrbuf* strbuf);
|
|
|
|
|
|
2021-03-21 20:42:07 +01:00
|
|
|
void ffStrbufSet(FFstrbuf* strbuf, const FFstrbuf* value);
|
2021-03-19 20:57:07 +01:00
|
|
|
void ffStrbufSetS(FFstrbuf* strbuf, const char* value);
|
|
|
|
|
void ffStrbufSetNS(FFstrbuf* strbuf, uint32_t length, const char* value);
|
|
|
|
|
void ffStrbufSetC(FFstrbuf* strbuf, const char c);
|
|
|
|
|
void ffStrbufSetF(FFstrbuf* strbuf, const char* format, ...);
|
|
|
|
|
void ffStrbufSetVF(FFstrbuf* strbuf, const char* format, va_list arguments);
|
|
|
|
|
|
2021-03-21 20:42:07 +01:00
|
|
|
void ffStrbufAppend(FFstrbuf* strbuf, const FFstrbuf* value);
|
2021-04-18 15:19:21 +02:00
|
|
|
void ffStrbufAppendTransformS(FFstrbuf* strbuf, const char* value, int(*transformFunc)(int));
|
2021-05-23 19:40:34 +02:00
|
|
|
void ffStrbufAppendSExcludingC(FFstrbuf* strbuf, const char* value, char exclude);
|
|
|
|
|
void ffStrbufAppendNSExludingC(FFstrbuf* strbuf, uint32_t length, const char* value, char exclude);
|
2021-03-19 20:57:07 +01:00
|
|
|
void ffStrbufAppendS(FFstrbuf* strbuf, const char* value);
|
|
|
|
|
void ffStrbufAppendNS(FFstrbuf* strbuf, uint32_t length, const char* value);
|
|
|
|
|
void ffStrbufAppendC(FFstrbuf* strbuf, const char c);
|
|
|
|
|
void ffStrbufAppendF(FFstrbuf* strbuf, const char* format, ...);
|
|
|
|
|
void ffStrbufAppendVF(FFstrbuf* strbuf, const char* format, va_list arguments);
|
|
|
|
|
|
|
|
|
|
char ffStrbufGetC(FFstrbuf* strbuf, uint32_t index);
|
|
|
|
|
|
2021-04-15 18:59:26 +02:00
|
|
|
void ffStrbufWriteTo(const FFstrbuf* strbuf, FILE* file);
|
|
|
|
|
void ffStrbufPutTo(const FFstrbuf* strbuf, FILE* file);
|
2021-03-19 20:57:07 +01:00
|
|
|
|
2021-04-22 21:41:42 +02:00
|
|
|
int ffStrbufComp(const FFstrbuf* strbuf, const FFstrbuf* comp);
|
|
|
|
|
int ffStrbufCompS(const FFstrbuf* strbuf, const char* comp);
|
|
|
|
|
|
|
|
|
|
int ffStrbufIgnCaseComp(const FFstrbuf* strbuf, const FFstrbuf* comp);
|
|
|
|
|
int ffStrbufIgnCaseCompS(const FFstrbuf* strbuf, const char* comp);
|
2021-03-19 20:57:07 +01:00
|
|
|
|
2021-03-21 16:52:17 +01:00
|
|
|
void ffStrbufTrimLeft(FFstrbuf* strbuf, char c);
|
|
|
|
|
void ffStrbufTrimRight(FFstrbuf* strbuf, char c);
|
|
|
|
|
void ffStrbufTrim(FFstrbuf* strbuf, char c);
|
|
|
|
|
|
2021-04-17 14:37:32 +02:00
|
|
|
void ffStrbufRemoveStringsA(FFstrbuf* strbuf, uint32_t numStrings, const char* strings[]);
|
|
|
|
|
void ffStrbufRemoveStringsV(FFstrbuf* strbuf, uint32_t numStrings, va_list arguments);
|
2021-03-28 13:02:40 +02:00
|
|
|
void ffStrbufRemoveStrings(FFstrbuf* strbuf, uint32_t numStrings, ...);
|
|
|
|
|
|
2021-06-26 15:34:01 +02:00
|
|
|
uint32_t ffStrbufNextIndexC(const FFstrbuf* strbuf, uint32_t start, char c);
|
2021-07-12 19:01:31 +02:00
|
|
|
uint32_t ffStrbufNextIndex(const FFstrbuf* strbuf, uint32_t start, const FFstrbuf* searched);
|
2021-06-26 15:34:01 +02:00
|
|
|
uint32_t ffStrbufNextIndexS(const FFstrbuf* strbuf, uint32_t start, const char* str);
|
2021-07-12 19:01:31 +02:00
|
|
|
|
|
|
|
|
uint32_t ffStrbufFirstIndexC(const FFstrbuf* strbuf, char c);
|
|
|
|
|
uint32_t ffStrbufFirstIndex(const FFstrbuf* strbuf, const FFstrbuf* searched);
|
2021-05-05 21:12:42 +02:00
|
|
|
uint32_t ffStrbufFirstIndexS(const FFstrbuf* strbuf, const char* str);
|
2021-07-12 19:01:31 +02:00
|
|
|
|
2021-06-26 15:34:01 +02:00
|
|
|
uint32_t ffStrbufPreviousIndexC(const FFstrbuf* strbuf, uint32_t start, char c);
|
|
|
|
|
uint32_t ffStrbufLastIndexC(const FFstrbuf* strbuf, char c);
|
2021-03-28 13:02:40 +02:00
|
|
|
|
2021-04-02 16:21:52 +02:00
|
|
|
void ffStrbufSubstrBefore(FFstrbuf* strbuf, uint32_t index);
|
|
|
|
|
void ffStrbufSubstrBeforeFirstC(FFstrbuf* strbuf, const char c);
|
2021-05-07 17:10:22 +02:00
|
|
|
void ffStrbufSubstrBeforeLastC(FFstrbuf* strbuf, const char c);
|
2021-04-02 16:21:52 +02:00
|
|
|
void ffStrbufSubstrAfter(FFstrbuf* strbuf, uint32_t index);
|
2021-05-07 17:10:22 +02:00
|
|
|
void ffStrbufSubstrAfterFirstC(FFstrbuf* strbuf, const char c);
|
2021-04-02 16:21:52 +02:00
|
|
|
void ffStrbufSubstrAfterLastC(FFstrbuf* strbuf, const char c);
|
|
|
|
|
|
2021-04-22 21:41:42 +02:00
|
|
|
bool ffStrbufStartsWith(const FFstrbuf* strbuf, const FFstrbuf* start);
|
|
|
|
|
bool ffStrbufStartsWithS(const FFstrbuf* strbuf, const char* start);
|
|
|
|
|
bool ffStrbufStartsWithNS(const FFstrbuf* strbuf, uint32_t length, const char* start);
|
2021-03-28 13:02:40 +02:00
|
|
|
|
2021-04-22 21:41:42 +02:00
|
|
|
bool ffStrbufStartsWithIgnCase(const FFstrbuf* strbuf, const FFstrbuf* start);
|
|
|
|
|
bool ffStrbufStartsWithIgnCaseS(const FFstrbuf* strbuf, const char* start);
|
|
|
|
|
bool ffStrbufStartsWithIgnCaseNS(const FFstrbuf* strbuf, uint32_t length, const char* start);
|
2021-04-09 19:21:56 +02:00
|
|
|
|
2021-05-23 19:40:34 +02:00
|
|
|
bool ffStrbufEndsWithS(const FFstrbuf* strbuf, const char* end);
|
|
|
|
|
|
2021-06-26 16:48:15 +02:00
|
|
|
bool ffStrbufEndsWithIgnCaseS(const FFstrbuf* strbuf, const char* end);
|
|
|
|
|
|
|
|
|
|
bool ffStrbufRemoveIgnCaseEndS(FFstrbuf* strbuf, const char* end);
|
|
|
|
|
|
2021-04-05 19:25:34 +02:00
|
|
|
void ffStrbufRecalculateLength(FFstrbuf* strbuf);
|
|
|
|
|
|
2021-03-19 20:57:07 +01:00
|
|
|
void ffStrbufDestroy(FFstrbuf* strbuf);
|
|
|
|
|
|
|
|
|
|
#endif
|