30#define DISABLE_DEBUGLOG
33#include <gwenhywfar/gwenhywfarapi.h>
34#include <gwenhywfar/misc.h>
35#include <gwenhywfar/text.h>
37#include "stringlist_p.h"
119 free((
void *)(e->data));
132 free((
void *)(sl->data));
177 tmpStr=(
char *) malloc(len+1);
179 memmove(tmpStr, s, len);
209 sl->first=curr->next;
214 while (curr->next!=se) {
256 if (strcmp(se->data, s)==0) {
267 if (strcasecmp(se->data, s)==0) {
296 if (strcmp(se->data, s)==0) {
307 if (strcasecmp(se->data, s)==0) {
333 if (strcmp(se->data, s)==0) {
334 assert(se->refCount);
336 if (sl->ignoreRefCount)
350 if (strcasecmp(se->data, s)==0) {
351 assert(se->refCount);
353 if (sl->ignoreRefCount)
376 assert(se->refCount);
379 if (sl->ignoreRefCount)
418 free((
void *)(se->data));
444 if (strcmp(se->data, s)==0) {
453 if (strcasecmp(se->data, s)==0) {
474 if (strcmp(se->data, s)==0) {
485 if (strcasecmp(se->data, s)==0) {
507 if (strcmp(se->data, s)==0) {
518 if (strcasecmp(se->data, s)==0) {
552 void *(*func)(
const char *s,
void *u),
565 result = func(el, user_data);
581 return l->first->data;
590 if (se1 && se2 && se1->data && se2->data)
591 return strcmp(se1->data, se2->data);
599 if (se1 && se2 && se1->data && se2->data)
600 return strcmp(se2->data, se1->data);
608 if (se1 && se2 && se1->data && se2->data)
609 return strcasecmp(se1->data, se2->data);
617 if (se1 && se2 && se1->data && se2->data)
618 return strcasecmp(se2->data, se1->data);
627 if (se1 && se2 && se1->data && se2->data) {
632 return (i1>i2) - (i1<i2);
642 if (se1 && se2 && se1->data && se2->data) {
647 return (i2>i1) - (i2<i1);
716 sentry->next=*psentry;
750 const unsigned char *s;
753 s=(
const unsigned char *)str;
761 const unsigned char *pStart;
767 while (*s && strchr(delimiters, *s)==
NULL)
774 toAdd=(
char *) malloc(len+1);
777 memmove(toAdd, pStart, len);
815 while (*s && isspace((
int)*s))
853 if (se->data && *(se->data)) {
854 if (entriesAdded && delimiter && *delimiter)
886 if (!(s1 && *s1 && s2 && *s2 && strcasecmp(s1, s2)==0))
905 if (se->data && *(se->data))
GWEN_BUFFER * GWEN_Buffer_new(char *buffer, uint32_t size, uint32_t used, int take)
void GWEN_Buffer_Reset(GWEN_BUFFER *bf)
void GWEN_Buffer_free(GWEN_BUFFER *bf)
int GWEN_Buffer_AppendString(GWEN_BUFFER *bf, const char *buffer)
char * GWEN_Buffer_GetStart(const GWEN_BUFFER *bf)
#define DBG_VERBOUS(dbg_logger, format, args...)
#define DBG_ERROR(dbg_logger, format, args...)
struct GWEN_BUFFER GWEN_BUFFER
A dynamically resizeable text buffer.
#define GWEN_FREE_OBJECT(varname)
#define GWEN_NEW_OBJECT(typ, varname)
void GWEN_StringList_free(GWEN_STRINGLIST *sl)
int GWEN_StringList_toBuffer(const GWEN_STRINGLIST *sl, const char *delimiter, GWEN_BUFFER *outBuffer)
void GWEN_StringList_SetSenseCase(GWEN_STRINGLIST *sl, int i)
static int GWEN_StringList__compar_asc_int(const void *a, const void *b)
static int GWEN_StringList__compar_desc_int(const void *a, const void *b)
GWEN_STRINGLIST * GWEN_StringList_fromString2(const char *str, const char *delimiters, int checkDouble, uint32_t flags)
const char * GWEN_StringListEntry_Data(const GWEN_STRINGLISTENTRY *se)
static int GWEN_StringList__compar_desc_case(const void *a, const void *b)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_Next(const GWEN_STRINGLISTENTRY *se)
unsigned int GWEN_StringList_Count(const GWEN_STRINGLIST *sl)
static int GWEN_StringList__compar_asc_nocase(const void *a, const void *b)
GWEN_STRINGLIST * GWEN_StringList_dup(const GWEN_STRINGLIST *sl)
void GWEN_StringListEntry_SetData(GWEN_STRINGLISTENTRY *se, const char *s)
void GWEN_StringListEntry_free(GWEN_STRINGLISTENTRY *sl)
GWEN_STRINGLISTENTRY * GWEN_StringList_FindStringEntry(const GWEN_STRINGLIST *sl, const char *s)
static int GWEN_StringList__compar_asc_case(const void *a, const void *b)
void GWEN_StringList_Clear(GWEN_STRINGLIST *sl)
void GWEN_StringList_Sort(GWEN_STRINGLIST *l, int ascending, GWEN_STRINGLIST_SORT_MODE sortMode)
void GWEN_StringList_AppendEntry(GWEN_STRINGLIST *sl, GWEN_STRINGLISTENTRY *se)
void GWEN_StringList_SetIgnoreRefCount(GWEN_STRINGLIST *sl, int i)
int GWEN_StringList_GetStringPos(const GWEN_STRINGLIST *sl, const char *s)
GWEN_STRINGLIST * GWEN_StringList_fromTabString(const char *s, int checkDup)
void * GWEN_StringList_ForEach(const GWEN_STRINGLIST *l, void *(*func)(const char *s, void *u), void *user_data)
int GWEN_StringList_AppendString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
static int GWEN_StringList__compar_desc_nocase(const void *a, const void *b)
void GWEN_StringListEntry_ReplaceString(GWEN_STRINGLISTENTRY *e, const char *s, int take)
int GWEN_StringList_InsertString(GWEN_STRINGLIST *sl, const char *s, int take, int checkDouble)
void GWEN_StringList_RemoveCommonFirstEntries(GWEN_STRINGLIST *sl1, GWEN_STRINGLIST *sl2)
const char * GWEN_StringList_StringAt(const GWEN_STRINGLIST *sl, int idx)
const char * GWEN_StringList_FirstString(const GWEN_STRINGLIST *l)
int GWEN_StringList_HasString(const GWEN_STRINGLIST *sl, const char *s)
int GWEN_StringList_RemoveString(GWEN_STRINGLIST *sl, const char *s)
void GWEN_StringList_RemoveFirstString(GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_fromString(const char *str, const char *delimiters, int checkDouble)
void GWEN_StringList_AppendStringList(GWEN_STRINGLIST *slDest, const GWEN_STRINGLIST *slSource, int checkDouble)
void GWEN_StringList_RemoveEntry(GWEN_STRINGLIST *sl, GWEN_STRINGLISTENTRY *se)
GWEN_STRINGLISTENTRY * GWEN_StringList_FirstEntry(const GWEN_STRINGLIST *sl)
GWEN_STRINGLIST * GWEN_StringList_new(void)
GWEN_STRINGLISTENTRY * GWEN_StringListEntry_new(const char *s, int take)
GWEN_STRINGLIST_SORT_MODE
@ GWEN_StringList_SortModeCase
@ GWEN_StringList_SortModeInt
@ GWEN_StringList_SortModeNoCase
struct GWEN_STRINGLISTENTRYSTRUCT GWEN_STRINGLISTENTRY
struct GWEN_STRINGLISTSTRUCT GWEN_STRINGLIST
int GWEN_Text_GetWordToBuffer(const char *src, const char *delims, GWEN_BUFFER *buf, uint32_t flags, const char **next)